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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

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

Q&A

解決済

1回答

2744閲覧

inputに入力があったら、該当箇所をハイライトし、他の入力箇所の無効化

Scarlett

総合スコア12

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

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

0グッド

0クリップ

投稿2017/01/06 08:49

編集2017/01/06 09:20

inputに入力があったら、該当箇所をハイライトし、他の入力箇所の無効化と、入力のあった箇所と隣接したsubmit以外を無効化。
編集してる1つだけしか更新できません、という意図の実装がしたいです。

空の配列定義して、初期値の値としてfor文で回して配列にいれる。
その配列をinputで入力のあったタイミングでハイライトとfor文をイベントとして発火させ、for文内のif文で比較しながら、書き換えのない列をdisabledで無効化。

という書き方をしていたのですが(前のコードはこちら)、イベント発火した親要素とformを比較しても同じことができるはずだから、その書き方にしてほしい。と言われて、うまくいかずに困っています。

最初のコードは、formの群をdivで包んでいたのですが、class="container"と同じところにつけるように指示がきたので、HTML構造が少し書き換わりました。

本題の修正中のコードがこちら

お力をお貸しいただけると、大変嬉しく思います。
よろしくお願いします。

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

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

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

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

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

kei344

2017/01/06 08:53

書かれているコードは「という書き方をしていたのですが」のコードでしょうか。そちらのコードも追記されてはいかがでしょうか。
Scarlett

2017/01/06 09:19

ありがとうございます。書き換えました。
guest

回答1

0

ベストアンサー

JavaScript

1document.addEventListener( 'DOMContentLoaded', _=> { 2 const elements = document.querySelectorAll( '#change_form form' ); 3 const len = elements.length; 4 document.addEventListener( 'input', e => { 5 const t = e.target; 6 const parent = t.parentNode; 7 t.style.backgroundColor = 'yellow'; 8 for ( let i = 0; i < len; i++ ) { 9 if ( elements[ i ] === parent ) { continue; } 10 for ( let ii = 0; ii < elements[ i ].length; ii++ ) { 11 elements[ i ][ ii ].disabled = true; 12 } 13 /* 14 // テキストエリアだけなら下記でもできるはず 15 elements[ i ].querySelectorAll( 'input' )[ 0 ].disabled = true;; 16 */ 17 } 18 } ); 19} ); 20```**動くサンプル:**[https://jsfiddle.net/0mr5x0sa/2/](https://jsfiddle.net/0mr5x0sa/2/) 21 22--- 23 24提示された下記「修正中のコード」は、 25 26```JavaScript 27 document.addEventListener("input", function(e){markAsEdited(e)}); 28 function markAsEdited(e) { 29 30 var t = e.target; 31 var parent = t.parentNode; 32 t.style.backgroundColor = "yellow"; 33 34 var elements = document.querySelectorAll("#change_form form"); 35 for (var i = 0; i < elements.length; i++) { 36 if(elements !== parent) { 37 for (var i = 0; i < parent.length; i++) { 38 parent.querySelectorAll("input").disabled = true; 39 } 40 } 41 } 42 }
  1. var i = 0; を2回使っているため無限ループします
  2. elements !== parent は Form の塊と現在の Form を比較しているので合うわけが無い
  3. parent.length はイベントが起こった所の要素数
  4. parent.querySelectorAll はイベントが起こった所のform要素から探している

また少なくとも parent.querySelectorAll("input")[0].disabled = true; と書かないと一つもdisabled にならない
0. parent.querySelectorAll("input") は複数要素を返すため、指定方法が違う

投稿2017/01/06 18:33

kei344

総合スコア69407

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

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

Scarlett

2017/01/08 13:46

確認、遅くなりました。 回答ありがとうございます。 理由など書いていただいていて、大変勉強になります。 ご指摘箇所を自分でも、もう少し調べてみます。 大変助かりました、ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問