
質問画面と回答画面の2つのファイルでQ&A掲示板を作成しています。
どちらも非同期通信(HTMLの書き換え)を行い、goo質問のように入力→確認→送信という形で設計しております。
コード短縮、実装順番の変更のために response.js にコードをまとめているのですが、確認送信ボタンのみ質問画面か回答画面を if で条件分岐する必要があるため、コードの書き方が分かりません。
ファイルアップロードの引数の値が質問と回答で異なるので、そこを利用して分岐したいと考えているのですが、どのように判定させればよいのでしょうか?
/* 質問&回答画面の確認送信ボタン */
const divPostButton = document.createElement("div"); // div (子)を生成
divPostButton.classList.add("post-button"); // classの追加
child = document.createElement("button"); // button (孫)を生成
child.type = "button";
child.innerText = "入力画面へ戻る";
child.addEventListener("click", () => {
change1();
input_area.style.display = "block";
// 空文字を入れることで要素内を空にできる
confirm_area.textContent = '';
confirm_area.style.display = "none";
});
divPostButton.appendChild(child); // div (子要素) の末尾に child を追加
child = document.createElement("button"); // button (孫)を生成
child.type = "button";
//name属性の追加・変更
child.setAttribute("name", "output");
child.innerText = "結果画面へ進む";
child.addEventListener("click", confirm_button_click);
divPostButton.appendChild(child); // div (子要素) の末尾に child を追加
/* ファイルアップロード(質問画面) */
const usericonImg = document.createElement("img");
const image_area = create_image_parts("image-partial", 3, usericonImg);
/* ファイルアップロード(回答画面)*/
const usericonImg = document.createElement("img");
const image_area = create_image_parts("uploadfile-area", 0, usericonImg);
/* ファイルアップロード(response.js) */
function create_image_parts(image_class, usericonIndex, usericonImg) {
const image_area = document.createElement("div");
// const comment_area = document.createElement("div");
var image_count = 0;
const divImagePartial = document.createElement("div"); // div (子)を生成
divImagePartial.classList.add(image_class); // classの追加
// var usericonImg;
for (let i = 0; i < blobType.length; i++) {
if (i == usericonIndex) {
// usericonImg = document.createElement("img");
usericonImg.style.maxHeight = "85px";
usericonImg.style.maxWidth = "85px";
if (blobType[i] == "") {
usericonImg.src = "<?php echo $noimage_url; ?>";
} else {
usericonImg.src = blobUrl[i];
}
} else {
var changeImg = null;
if (blobType[i] == "img") {
changeImg = document.createElement("img");
} else if (blobType[i] == "video") {
changeImg = document.createElement("video");
changeImg.setAttribute("controls", null);
} else if (blobType[i] == "iframe") {
changeImg = document.createElement("iframe");
}
if (changeImg !== null) {
image_count++;
changeImg.classList.add("changeImg");
changeImg.style.height = "350px";
changeImg.style.width = "530px";
changeImg.src = blobUrl[i];
const divImageCameraIcon = document.createElement("div"); // div (孫)を生成
divImageCameraIcon.classList.add("image-camera-icon"); // classの追加
divImageCameraIcon.appendChild(changeImg); // image_camera_icon (子要素) の末尾に changeImg を追加
divImagePartial.appendChild(divImageCameraIcon); // uploadfile_area (親要素) の末尾に image_camera_icon を追加
}
}
}
image_area.appendChild(divImagePartial); // image_area (親要素) の末尾に div を追加
return image_area;
}
No.1ベストアンサー
- 回答日時:
Java script詳しくないのですが、Perplexityでコードを出力してみました。
( ゚Д゚)y─┛~~
わからないところは微調整してくれるので、
こちらを使うと便利ですよ。
以上、参考になれば幸いです。
====================
質問画面と回答画面の非同期通信を行うQ&A掲示板の実装において、
確認送信ボタンの処理を条件分岐させる方法について説明します。
ファイルアップロードの引数の値を利用して、
質問と回答を判定するためのコード例を以下に示します。
条件分岐の実装
まず、質問画面と回答画面を識別するために、
特定の属性や変数を使用します。例えば、ボタンがクリックされた際に、
どちらの画面からの操作かを判定するために、
data属性やグローバル変数を使う方法があります。
1. HTMLボタンにデータ属性を追加
javascript
// 質問画面用ボタン
child.setAttribute("data-type", "question");
// 回答画面用ボタン
child.setAttribute("data-type", "answer");
2. ボタンクリック時の処理
次に、ボタンがクリックされた際に、
そのdata-type属性を参照して条件分岐を行います。
javascript
child.addEventListener("click", () => {
const buttonType = child.getAttribute("data-type");
if (buttonType === "question") {
// 質問画面用の処理
handleQuestionSubmission();
} else if (buttonType === "answer") {
// 回答画面用の処理
handleAnswerSubmission();
}
});
3. 処理関数の定義
それぞれの処理関数を定義します。
ここでは簡単な例として、コンソールログで確認していますが、
実際には非同期通信やデータ送信処理を行います。
javascript
function handleQuestionSubmission() {
console.log("質問が送信されました。");
// ここに質問送信処理を書く
}
function handleAnswerSubmission() {
console.log("回答が送信されました。");
// ここに回答送信処理を書く
}
ファイルアップロードの引数による判定
ファイルアップロード時に異なる引数を利用して画面を判定する場合、
以下のような方法も考えられます。
1. 引数から情報を取得
ファイルアップロード関数内で引数を受け取り、
その内容によって判定します。
javascript
function create_image_parts(image_class, usericonIndex, usericonImg, isQuestion) {
if (isQuestion) {
// 質問用の処理
} else {
// 回答用の処理
}
}
2. 呼び出し時に引数を渡す
質問画面または回答画面からこの関数を呼び出す際に、
適切なフラグ(true または false)を渡します。
javascript
const image_area = create_image_parts("image-partial", 3, usericonImg, true); // 質問の場合
const image_area = create_image_parts("uploadfile-area", 0, usericonImg, false); // 回答の場合
このようにして、ボタンのクリックイベントや
ファイルアップロード時に条件分岐を行うことで、
それぞれの画面で異なる処理を実装できます。
回答ありがとうございます。
前後のコードを提示していなかったので、新規で関数を作成されたんですね。
既存のコードを使って、コードをまとめてみました。
const set_attach_event = function (fileAreaSelector, usericonIndex) {
/* カメラ画像をファイルアップロード時に非表示にする */
/* 省略 */
/* カメラ画像をファイルアップロード時に非表示にする */
const attach = document.querySelectorAll('.attach');
const clear = document.querySelectorAll('.attachclear');
const viewer = document.querySelectorAll('.viewer');
const changeImg = document.querySelectorAll('.changeImg'); // 入力されたら消す画像
const fileArea = document.querySelectorAll(fileAreaSelector);
const set_attach_image = function (i) {
//HTML要素の中身を変更するときに使われるプロパティ
if (i == usericonIndex) {
maxsize = 5;
height = "85px";
width = "85px";
} else {
maxsize = 15;
height = "350px";
width = "530px";
}
}
const divPostButton = create_button_parts(2);
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript Javascript で共通の処理をどこまでまとめるべきか分からないのでアドバイスお願い致します 1 2024/03/19 12:04
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- JavaScript 変数名をどのようにつけるのが良いかアドバイスお願い致します 4 2024/02/28 19:44
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- JavaScript Q&A掲示板の入力フォームに文字数制限を設けて入力可能な文字数を表示したい 1 2024/04/08 02:46
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- JavaScript Javascriptのhtml出力についてappendChildはどのような意味があるのでしょうか? 2 2024/01/29 16:48
- HTML・CSS サイトにコンテンツを並べる際の CSS についてアドバイスお願い致します。 5 2024/07/08 21:39
- JavaScript disabled プロパティが表示されない原因が分からない 2 2024/02/10 21:44
- JavaScript JavascriptのHTMLクラス表示について 1 2024/03/10 19:10
このQ&Aを見た人はこんなQ&Aも見ています
-
性格悪い人が優勝
できるだけ性格悪い人になって回答をお願いします。
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
最速怪談選手権
できるだけ短い文章で怖がらせてください。
-
スタッフと宿泊客が全員斜め上を行くホテルのレビュー
スタッフも宿泊客も、一流を通り越して全員斜め上なホテルのレビューにありがちな内容を教えて下さい
-
カラオケの鉄板ソング
歌えばその場が絶対盛り上がる「鉄板ソング」を教えてください!
-
JavaScriptを本で勉強しています。 ほんとのほんとの序盤なのですが、 本の内容に、vscod
JavaScript
-
javascriptを使ってラジオボタンで本文の内容を切り替えたいです
JavaScript
-
jsで質問です。 formをsubmitしてサーバー側で処理が行われて処理が完了したら、フロント側で
JavaScript
-
-
4
プログラミング 学習
JavaScript
-
5
jQueryでシンセサイザーを作っている途中なのですが、たまに指を離しても音が止まらなくなります
JavaScript
-
6
プログラマーは誘惑にさらされる人生?
その他(プログラミング・Web制作)
-
7
食材の期限を管理するためにGASを利用しようとしたのですがうまく動作してくれません
JavaScript
-
8
至急助けてください!!!あと2時間しかないです! ボタンを押したら0ランプが点灯し、コンマ5秒後に1
その他(プログラミング・Web制作)
-
9
以下のプログラムの実行結果はどうなると思いますか? その理由も教えてください。
Visual Basic(VBA)
-
10
htmlが簡単に作成できるアプリについて
HTML・CSS
-
11
文系のSE志望です。プログラミングを今から習得したいのですが、初めて学ぶのにオススメの言語があれば教
その他(プログラミング・Web制作)
-
12
鍵盤アプリで、スマホの画面に並んだ鍵盤をなぞった時に、触れた鍵が次々発火するようにするには
JavaScript
-
13
フロントエンドエンジニアをしていますが、スキルアップのための転職、異動は3年目では早すぎますか? 今
その他(プログラミング・Web制作)
-
14
Visualbasicの現状について教えてください
Visual Basic(VBA)
-
15
アセンブラーの命令についてです。
その他(プログラミング・Web制作)
-
16
DNCL(共テ用プログラミング言語)について 写真の(12)のプログラムにおいて、解説によると(12
C言語・C++・C#
-
17
アルゴリズムとコードとは何ですか 現代はネットでコードを探してドラクエ3が作れるとか?
その他(プログラミング・Web制作)
-
18
クリック時に生成したものを削除することは可能でしょうか?
ホームページ作成・プログラミング
-
19
Pythonのコードエラーについてです。
その他(プログラミング・Web制作)
-
20
逆コンパイルと逆アセンブルの違いはなんですか
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
読み込んだQRコードをフォーム...
-
jsonテキストデータの並び替え...
-
ラジオボタンを複数選択したと...
-
スマホ上で、左右スワイプで次...
-
イラストレーター、縦中横のシ...
-
セレクトボックスを2つ選択して...
-
2段階プルダウンで1段階目の選...
-
鍵盤アプリで、スマホの画面に...
-
アップロードファイルの種類に...
-
jquery 診断コンテンツにチェッ...
-
最小二乗法
-
階層別の組織図の自動作成について
-
セレクトボックスを選んで点数...
-
jQueryで同じクラス名のものを...
-
フォームが空欄の時にフォーム...
-
Google reCAPTCHAについて
-
React と Electron でデスクト...
-
変数宣言と初期値代入の場所に...
-
jsで質問です。 formをsubmitし...
-
Adobe acrobat proでフォームを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
スマホ上で、左右スワイプで次...
-
jsで質問です。 formをsubmitし...
-
ラジオボタンを複数選択したと...
-
jqueryのselect2で検索欄の文字...
-
読み込んだQRコードをフォーム...
-
初心者です。gulpでコンパイル...
-
二次元配列の中の各行の要素を...
-
jsonテキストデータの並び替え...
-
セレクトボックスで配列を呼び...
-
【GAS】WEBアプリでハイパーリ...
-
ローディングアニメーションの...
-
jQueryで同じクラス名のものを...
-
二次元配列を使って順位をだす...
-
階層別の組織図の自動作成について
-
【Google Apps Script】「ライ...
-
画面遷移を行わずに同一ページ...
-
Adobe acrobat proでフォームを...
-
2段階プルダウンで1段階目の選...
-
二次元配列の全要素の全要素を...
-
定積分の近似値を計算する関数c...
おすすめ情報