2017-01-05 7 views
1

をクリックします。別のボタンをチェックし、チェックボックスのチェックを外すと、私がチェックチェックボックスは、別のボタンをクリックすると上のチェックボックスをオフにしたい

以下

IntervaリットルのクリックでHTML

<input type="checkbox" name="checkb" id="Agent" value="Agent"> type=Agent 
<br /> 

    <input type="checkbox" name="checkb" id="Customer" value="Customer"> type=Customer 
<br /> 

    <input type="checkbox" name="checkb" id="Phone" value="Phone"> type=Phone 
<br /> 

    <input type="checkbox" name="checkb" id="ID_Card" value="ID_Card"> type=ID_Card 
<br /> 

<input type=datetime id="Start_Date" value="" placeholder="Start_Date" /> 
<input type=datetime id="End_Date" value="" placeholder="End_Date" /> 
<button id="date"> 
    Interval 
</button> 

ですボタンがチェックされている場合は、チェックを外す必要があります。以下は

間隔ボタンのイベントリスナーさ:コードの下

  var check1 = document.getElementById("Agent"); 
var check2 = document.getElementById("Customer"); 
var check3 = document.getElementById("Phone"); 
var check4 = document.getElementById("ID_Card"); 


var newBtn = document.getElementById("date"); 
if (newBtn) { 
    newBtn.addEventListener("click", function() { 

    if (check1.checked) { 
     var ischecked1 = check1.checked; 

     check1.checked != ischecked1; 
    } 
    if (check2.checked) { 
     var ischecked2 = check2.checked; 

     check2.checked != ischecked2; 

    } 

    if (check3.checked) { 
     var ischecked3 = check3.checked; 

     check3.checked != ischecked3; 
    } 
    if (check4.checked) { 
     var ischecked4 = check4.checked; 

     check4.checked != ischecked4; 

    } 
    }); 
} 

はエラーなしに動作しますが、それらがチェックされている場合ボックスはオフに得ることはありません。以下は

fiddle

答えて

4

あなたの文がちょうど割り当てを行わない、真偽値として評価されている。

check1.checked != ischecked1; // this returns a boolean, doesn't do any assignment 

あなたがチェック状態を切り替えるために、これを行うにはしたく:

check1.checked = !ischecked1; 

同じ他のチェックボックスのためのもの。

余分な変数を作成する必要があなただけのトグルを行うと、直接読み込むことができ、また、ありません:

check1.checked = !check1.checked; 

それらがチェックされたときにのみ、チェックボックスをトグルしているので、あなただけの直接にそれらを設定することができますfalseも同様である。

代わり if文を有するので、あなたがトグルを行うには、配列の反復を使用することができます
if (check1.checked) check1.checked = false; 

その様子によって
[check1, check2, check3, check4].forEach(check => { 
    if (check.checked) { 
    check.checked = false; 
    } 
}); 

// or query the checkboxes directly and do the same 
[...document.querySelectorAll('input[type="checkbox"]')].forEach(check => { 
    if (check.checked) { 
    check.checked = false; 
    } 
}); 
+1

これは完璧であり、このグループに特別に関連付けられたクラスを使って何らかの並べ替えを行ったり、チェックの名前を使用すると改善することはできません。しかし、素晴らしい答え。 –

+0

私はローカルで試してみてjsfiddleではなく、Uncaught TypeErrorで失敗します:ForEach.check(http://172.31.179.196:5000/static/final.js:457:18)で nullのプロパティ 'checked'を読み取ることができません。 at Array.forEach(ネイティブ) at HTMLSelectElement.onSelectChange –

+0

これは、要素の1つが 'null'であるためです。つまり、間違ったIDを' getElementById'に入れて要素を見つけることができないか、正しいid要素をDOMに追加するのを忘れてしまった。 – nem035

1

あなたはちょうどあなたがボタン

のクリックですべてのチェックボックスをオフにしたいですちょうどこれを行うことができます

var newBtn = document.getElementById("date"); 
if (newBtn) { 
    newBtn.addEventListener("click", function() { 
     document.getElementById("Agent").checked = 
     document.getElementById("Customer").checked = 
     document.getElementById("Phone").checked = 
     document.getElementById("ID_Card").checked = false; 
    }); 
} 
1

あなたの間違いはこの行にあります:

check1.checked != ischecked1; 

これは実際には「check1.checkedがischecked1と等しくないかどうかを比較する」ことを意味します。

check1.checked = !check1.checked 

これは「check1.checkedの反対にcheck1.checkedセット」を意味します

ほとんどの簡単な解決策は、これを行うif文だけを取り除くことであろう。

すべてのチェックボックスの名前が同じであるため、すべてのチェックボックスを名前で要求し、ループを使用してそれらを処理することもできます。小さな例:

関連する問題