Javascript 根据 id 选中/取消选中复选框

标签 javascript checkbox

我有很多服务器输入复选框。我已经为第一个复选框指定了 id all。默认情况下它将被选中。当用户选中其他复选框时,id 为 all 的复选框将被取消选中。如果 all 被选中,其他复选框将被取消选中。为此,我编写了代码,但没有任何反应。

这是我尝试过的。

<form>
<input type="checkbox" id="all" value="all" name="all" onChange="check()" checked/>ALL <br/>
<input type="checkbox" id="servers" value="xampp" name="server[]" onChange="check()" />XAMPP <br/>
<input type="checkbox" id="servers" value="wamp" name="server[]" onChange="check()" />WAMP <br/>
<input type="checkbox" id="servers" value="mamp" name="server[]" onChange="check()" />MAMP <br/>
<input type="checkbox" id="servers" value="amp" name="server[]" onChange="check()" />AMP <br/>
</form>


function check(){
    var all = document.getElementById("all"),
        group = document.getElementById("servers");
    if(all.checked == true){
        group.checked == false;
    }elseif(group.checked == true){
        all.checked == false;
    }
}

我希望我的代码像 THIS 一样工作.

出于某些原因我不想使用 jQuery。所以我需要我的代码是纯 JS。

我们将不胜感激。

最佳答案

您不能在多个元素上使用相同的 ID。

试试这个,注意我是如何将复选框放在 div

中的

它在这里工作:http://jsfiddle.net/Sa2d3/

HTML:

<form>
    <div id="checkboxes">
        <input type="checkbox" id="all" value="all" name="all" onChange="check()" />ALL <br/>
        <input type="checkbox" value="xampp" name="server[]" onChange="check()" />XAMPP <br/>
        <input type="checkbox" value="wamp" name="server[]" onChange="check()" />WAMP <br/>
        <input type="checkbox" value="mamp" name="server[]" onChange="check()" />MAMP <br/>
        <input type="checkbox" value="amp" name="server[]" onChange="check()" />AMP <br/>
    </div>
</form>

JavaScript:

document.getElementById('checkboxes').addEventListener('change', function(e) {
    var el = e.target;
    var inputs = document.getElementById('checkboxes').getElementsByTagName('input');

    // If 'all' was clicked
    if (el.id === 'all') {

        // loop through all the inputs, skipping the first one
        for (var i = 1, input; input = inputs[i++]; ) {

            // Set each input's value to 'all'.
            input.checked = el.checked;
        }
    }

    // We need to check if all checkboxes have been checked
    else {
        var numChecked = 0;

        for (var i = 1, input; input = inputs[i++]; ) {
            if (input.checked) {
                numChecked++;
            }
        }

        // If all checkboxes have been checked, then check 'all' as well
        inputs[0].checked = numChecked === inputs.length - 1;
    }
}, false);

编辑:

根据您在此处评论中的要求,更新了 javascript: http://jsfiddle.net/T5Pm7/

document.getElementById('checkboxes').addEventListener('change', function(e) {
    var el = e.target;
    var inputs = document.getElementById('checkboxes').getElementsByTagName('input');

    // If 'all' was clicked
    if (el.id === 'all') {

        // If 'all' is checked
        if (el.checked) {

            // Loop through the other inputs and removed the check
            for (var i = 1, input; input = inputs[i++]; ) {
                input.checked = false;
            }
        }
    }

    // If another has been clicked, remove the check from 'all'
    else {
        inputs[0].checked = false;
    }
}, false);

关于Javascript 根据 id 选中/取消选中复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17915065/

相关文章:

javascript - Rally "Building Your First App"应用程序无法运行

如果匹配特定单词,Javascript 大写前 x 个字符?

javascript - 使用变量属性值从javascript数组中删除对象

javascript - 恢复选中复选框的所有值并将它们插入数组中

javascript - 默认情况下无法将整个 div 内容设置为只读,并且在单击编辑按钮时无法启用编辑

javascript - Web 组件监听器在销毁时解除绑定(bind)

javascript - 标题复选框检查 gridview 行,但界面显示否则

jquery - 获取复选框的 id? - jQuery

checkbox - Angular 2 - 复选框 "checked"取决于函数而不是属性 biind

javascript - 在 javascript 中为未选中的复选框设置值 null