1document.addEventListener('DOMContentLoaded',_=>{2const elements =document.querySelectorAll('#change_form form');3const len = elements.length;4document.addEventListener('input',e=>{5const t = e.target;6const parent = t.parentNode;7 t.style.backgroundColor='yellow';8for(let i =0; i < len; i++){9if( elements[ i ]=== parent ){continue;}10for(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/)
2122---
2324提示された下記「修正中のコード」は、
2526```JavaScript27document.addEventListener("input",function(e){markAsEdited(e)});28functionmarkAsEdited(e){2930var t = e.target;31var parent = t.parentNode;32 t.style.backgroundColor="yellow";3334var elements =document.querySelectorAll("#change_form form");35for(var i =0; i < elements.length; i++){36if(elements !== parent){37for(var i =0; i < parent.length; i++){38 parent.querySelectorAll("input").disabled=true;39}40}41}42}
var i = 0; を2回使っているため無限ループします
elements !== parent は Form の塊と現在の Form を比較しているので合うわけが無い