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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

1764閲覧

不特定多数の入力フォームを同期させる方法について

miminaga

総合スコア9

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2018/06/11 07:13

前提・実現したいこと

当方、プログラムは勉強中のため、記載に不備があった場合は申し訳ございません。
ご指摘いただけますと幸いです。

複数の入力可能なテキストフォームがあり、一つのテキストフォームに文字を入力したら、同じ属性を持つ他のテキストフォームにも内容を反映したいと考えております。
同期させるフォームは複数になる予定で、フォームの数は、条件により0~5個程度の数で変動する予定です。


自分の名前を入力する「フォームA、フォームB、フォームC」
相手の名前を入力する「フォーム1 フォーム2」
住所を入力する「フォームい フォームろ フォームは フォームに」
日程を入力する「(存在しない)」

上記のようなフォームが存在する場合、「A、B、C」「1、2」「い、ろ、は、に」がそれぞれ同期する状態を理想としています。

文字列の反映はである必要は有りません。
「onChange」のタイミングで同期されればよいとおもっております。

現在固定された2つのフォームを相互に参照させる形で同期させることはできましたが
フォームの数が変動する場合の処理が判らず手間取っております。

JavaScriptで実現出来ないでしょうか。
ご助言いただけますようよろしくお願いします。

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

・同期をさせたいフォームの数が変動する場合の処理
・フォームに固定のIDを設けることが出来ないため、class、name等の値を参照した同期

上記2点の実現方法を模索しております。

該当のソースコード

HTML

1<input type="text" name="name" id="nameA" onChange="copyTo('nameA','nameB')"> 2<input type="text" name="name" id="nameB" onChange="copyTo('nameB','nameA')"> 3<input type="text" name="name" id="nameD" onChange="copyTo('nameD','nameE')"> 4<input type="text" name="name" id="nameE" onChange="copyTo('nameE','nameD')">

javaScript

1<script> 2 function copyTo(fromId, toId){ 3 var fromTag = document.getElementById(fromId); 4 var toTag = document.getElementById(toId); 5 toTag.value = fromTag.value; 6 } 7</script>

試したこと

現在、上記のソースで固定された2つのフォームを相互参照状態にすることには成功しました。
idをclassやnameに変更し、scriptをgetElementsByClassNameやgetElementsByNameに変更して実行しましたが、
同期はしませんでした。

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

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

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

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

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

kei344

2018/06/11 07:18

ご自身で試されたコードを質問文に追記し、「何」が「どのように」わからないのか、コードのどの部分で詰まっているのかなどを具体的に追記されたほうが回答が望めると思います。
guest

回答1

0

ベストアンサー

対象の数が変動する処理では、処理対象物を配列化して、その配列に対するループ処理を行うようにすると、うまく設計できます。

例えば copyTo() の第二引数を、コピー先エレメント名の配列にすれば、以下のように処理できます。

JavaScript

1function copyTo(fromId, toIdArray){ 2 var fromTag = document.getElementById(fromId); 3 toIdArray.forEach((toId) => { 4 var toTag = document.getElementById(toId); 5 toTag.value = fromTag.value; 6 } 7} 8 9copyTo('nameA', ['nameB']); 10copyTo('nameA', ['nameB', 'nameC']); 11copyTo('nameA', ['nameB', 'nameC', 'nameD']); 12copyTo('nameA', [ ]); // 空の配列の場合は forEach ループが一度も回らずに処理が終わります。 13

上記では各エレメントに固定のIDが割り当てられていることが前提となっています。
各エレメントに固定のIDを割り当てられない場合は、配列を適切に作成するための処理を考える必要があります。

ご参考になれば。

投稿2018/06/11 07:31

tkanda

総合スコア2425

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問