2017-04-01 16 views
1

私は約30の類似した行を持つHTMLフォームを持っています。各行は、このようなものです:チェックボックスがチェックされていない場合繰り返しJavaScriptを避ける

<tr> 
    <td>Car Park</td> 
    <td><input type="checkbox" id="local_parking" name="amenity[]" value="local_parking"></td> 
    <td><input type="text" id="local_parking_t" name="amenity_text[]" value="Car park"></td> 
</tr> 

、テキストボックスには、次のMySQLのクエリにその値を渡し、それを避けるために無効にする必要があります。私はこのJavaScriptで1行のためにそれを行うことができます。

document.getElementById('local_parking').onchange = function() { 
    document.getElementById('local_parking_t').disabled = !this.checked; 
}; 

それは異なるIDでオーバーjavascriptの30回を繰り返すことは不当に厄介なようだが。より良い方法がありますか?

答えて

1

キャッチすべてのcheckboxchangeイベントリスナーをバインドします。ユーザのチェックがcheckboxと指定されている場合は、対応するtext入力を有効にします。完璧に動作

var checkboxes = document.querySelectorAll('input[type=checkbox]'), 
 
    inputs = document.querySelectorAll('input[type=text]'); 
 
    
 
    [...checkboxes].forEach((v,i) => v.addEventListener('change', function(){ 
 
     inputs[i].disabled = !this.checked; 
 
    }));
<tr> 
 
    <td>Car Park</td> 
 
    <td><input type="checkbox" id="local_parking" name="amenity[]" value="local_parking"></td> 
 
    <td><input type="text" id="local_parking_t" disabled name="amenity_text[]" value="Car park"></td> 
 
</tr> 
 
<br> 
 
<tr> 
 
    <td>Some txt</td> 
 
    <td><input type="checkbox" id="local_parking" name="amenity[]" value="local_parking"></td> 
 
    <td><input type="text" id="local_parking_t" disabled name="amenity_text[]" value="Car "></td> 
 
</tr>

+0

。あなたは確かに "親切なユーザー"です。私は自分のjavascriptの目的のためだけにそこにあったように私はidsをドロップすることができました。ちょっとした問題があります.Dreamweaverは「Array」で始まる行に問題があることを示唆するハイライトをスローします。私はそれを見ることはできません。何か案は? – TrapezeArtist

+0

@TrapezeArtist Array.fromはES6の機能です。たとえば、アクセス不可能な可能性があります。代わりに普及演算子を使用することができます。今すぐチェックしてください。 –

+0

どちらのバージョンも完璧に動作しているようですが、Dreamweaverではまだそれが好きではありません。それはCS5.5なので、恐らくそこには何か新しいものがあり、認識できません。 – TrapezeArtist

0

共通のクラスを使用してCHECKBOX要素をターゲティングし、DOMトラバーサルメソッドを使用してINPUT要素を対象とすることができます。

var elements = document.querySelectorAll('.local_parking'); 
 
elements.forEach(function(element) { 
 
    element.addEventListener('change', function() { 
 
    this.parentNode.nextElementSibling.childNodes[0].disabled = !this.checked; 
 
    }); 
 
});
<table> 
 
    <tr> 
 
    <td>Car Park</td> 
 
    <td><input type="checkbox" class="local_parking" name="amenity[]" value="local_parking"></td> 
 
    <td><input type="text" class="local_parking_t" name="amenity_text[]" value="Car park" disabled></td> 
 
    </tr> 
 
    <tr> 
 
    <td>Car Park</td> 
 
    <td><input type="checkbox" class="local_parking" name="amenity[]" value="local_parking"></td> 
 
    <td><input type="text" class="local_parking_t" name="amenity_text[]" value="Car park" disabled></td> 
 
    </tr> 
 
</table>

関連する問題