質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1056閲覧

JavaScriptでinnerHTMLに動的に入力する

hina_hina

総合スコア2

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/04/01 12:56

前提・実現したいこと

ここに質問の内容を詳しく書いてください。

innerHTMLで動的に変化させたフォームに全て同じ値を入力したいのですが動作しません。

①は、一つのフォームに入力すると他のフォームへも同時に入力されるJavaScriptです。

②は初期表示のプルダウンを選択するとinnerHTMLで動的にテキストフォームを出現させるJavaScriptです。
この時、商品名1に値を入力したら商品名2〜5まで同じ内容を入力させたいのですが動作しません。イメージとしては①で作ったJavaScriptなのですが、innerHTMLにしたら動作しませんでした。

お手数お掛け致しますが、何卒ご教示下されば幸いです。

発生している問題・エラーメッセージ

意図した動作が行われない

該当のソースコード

====== ① <!DOCTYPE HTML> <html lang="en-US">     <head>         <meta charset="UTF-8">         <title></title>     </head>     <body>         <form action="">             <textarea name="" id="input1" cols="30" rows="10"></textarea>             <textarea name="" id="input2" cols="30" rows="10"></textarea>             <textarea name="" id="input3" cols="30" rows="10"></textarea>             <textarea name="" id="input4" cols="30" rows="10"></textarea>         </form>         <script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>         <script type="text/javascript">             $(function () {                 $("#input1").on("keyup change", function () {                     $("#input2,#input3,#input4").val($(this).val());                 });                 $("#input2").on("keyup change", function () {                     $("#input1,#input3,#input4").val($(this).val());                 });                 $("#input3").on("keyup change", function () {                     $("#input1,#input2,#input4").val($(this).val());                 });                 $("#input4").on("keyup change", function () {                     $("#input1,#input2,#input3").val($(this).val());                 });             });         </script>     </body> </html> ====== ② <!DOCTYPE HTML> <html lang="en-US">     <head>         <meta charset="UTF-8">         <title></title>     </head>     <body> <form name="enquete" method="post" enctype="multipart/form-data"> <dt>カテゴリーを選ぶ<dt>     <dd>     <select name="category" class="required" required id="Select1" onchange="selectboxChange();">     <option value="">選択してください</option>     <option value="選択肢1" >選択肢1</option>     <option value="選択肢2" >選択肢2</option>     <option value="選択肢3" >選択肢3</option>     <option value="選択肢4" >選択肢4</option>     <option value="選択肢5" >選択肢5</option>     </select></dd> <script src="https://code.jquery.com/jquery-2.1.4.min.js"></script> <script type="text/javascript" language="javascript">     function selectboxChange() {           target = document.getElementById("output");                selindex = document.enquete.Select1.selectedIndex;           switch (selindex) {             case 1:               target.innerHTML =                '<dt>商品名1<dt>'+               '<dd><input type="text" name="name" id="name1" value="" required/><dd>';             break;             case 2:               target.innerHTML =                '<dt>商品名2<dt>'+               '<dd><input type="text" name="name"  id="name2" value="" required/><dd>';                           break;             case 3:               target.innerHTML =                '<dt>商品名3<dt>'+               '<dd><input type="text" name="name"  id="name3" value="" required/><dd>';               break;             case 4:               target.innerHTML =                '<dt>商品名4<dt>'+               '<dd><input type="text" name="name"  id="name4" value="" required/><dd>';               break;             case 5:               target.innerHTML =                '<dt>商品名5<dt>'+               '<dd><input type="text" name="name"  id="name5" value="" required/><dd>';               break;                    default:               target.innerHTML = '';           }         $(function () {         $("#name1").on("keyup change", function () {             $("#name2,#name3,#name4").val($(this).val());         });         $("#name2").on("keyup change", function () {             $("#name1,#name3,#name4").val($(this).val());         });         $("#name3").on("keyup change", function () {             $("#name1,#name2,#name4").val($(this).val());         });         $("#name4").on("keyup change", function () {             $("#name1,#name2,#name3").val($(this).val());         });         });     }          </script>     <div id="output"></div> </form> </body> </html>

試したこと

JavaScriptの書く順番を変える、ソースコードの書き損じのチェックなど

補足情報(FW/ツールのバージョンなど)

ChromeとFirefoxで確認

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2021/04/01 13:04

(2)は意味がよくわかりません。 選択肢を選ぶ→inputが出てくるまではわかりますが、 1を入れたら2-5が同じ値というのが理解できません 1を入れても2-5は存在しませんよね?
hina_hina

2021/04/01 13:09

> 1を入れても2-5は存在しませんよね? ①の例のように、同時に値を入力する事はinnerHTMLの場合は不可能なのでしょうか。
guest

回答1

0

ベストアンサー

(1)はこんな感じ

javascript

1$(function () { 2 $("textarea").on("input", function () { 3 $("textarea").not(this).val($(this).val()); 4 }); 5});

(2)は好意的に想像してこんな感じ

javascript

1$(function(){ 2 var v=""; 3 var list={ 4 "選択肢1":{"product":"商品名1","id":"name1"}, 5 "選択肢2":{"product":"商品名2","id":"name2"}, 6 "選択肢3":{"product":"商品名3","id":"name3"}, 7 "選択肢4":{"product":"商品名4","id":"name4"}, 8 "選択肢5":{"product":"商品名5","id":"name5"}, 9 }; 10 $('#Select1').on('change',function(){ 11 $('#output').empty().append( 12 $("<dt>").text(list[$(this).val()].product), 13 $("<dd>").append($('<input type="text" name="name" required>').attr('id',list[$(this).val()].id).val(v)) 14 ); 15 }); 16 $(document).on('change','[name="name"]',function(){ 17 v=$(this).val(); 18 }); 19});

投稿2021/04/01 13:00

編集2021/04/02 00:24
yambejp

総合スコア116720

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hina_hina

2021/04/01 13:04

①は動作例で、②のinnerHTMLに対する解答が欲しかったので、申し訳ありません。
yambejp

2021/04/02 00:25

おそらく考え方がおかしいです。 存在しないHTML要素の値を変更することはできません。 値をとっておくか、要素を隠しておく必要があるでしょう。 前者のサンプルを追記しておきました
hina_hina

2021/04/03 02:41

意図した通りの動作でした。素晴らしいです。 jqueryは不勉強なのでappendやattrなどしっかり頭に入れていきたいと思います。 この度は有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問