【问题标题】:cannot check/uncheck checkbox in javascript/jquery无法选中/取消选中 javascript/jquery 中的复选框
【发布时间】:2013-01-30 09:26:59
【问题描述】:

我有一个复选框,它将切换 html 表单上的一些其他复选框:

<input type="checkbox" name="selector" onclick="toggle_all(this);"/>

<script language="javascript">
function toggle_all(source) {
    var checkboxes = $(":input[name^='form[r']");
    if($(source).is(':checked')) {
        checkboxes.attr('checked', 'checked');
    } else {
        checkboxes.removeAttr('checked');
    }
    alert('done');
}
</script>

第一次单击“选择器”复选框时,所有名称以“form[r”开头的复选框都会被选中。然后,当“选择器”复选框未选中时,所有其他复选框也未选中。从那时起,选中/取消选中“选择器”复选框不会影响其他复选框。代码正在运行,因为 alert('done') 出现了。这里有什么问题?

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    我会建议改进。更改 HTML,为所有复选框添加一些类:

    <input class="check" type="checkbox" name="form[r]">
    

    还有 JS:

    function toggle_all(source) {
        $(".check").prop('checked', source.checked);
    }
    

    http://jsfiddle.net/tFv3G/

    原因是通过属性搜索元素比通过类名慢得多。而且可读性也较差。

    【讨论】:

      【解决方案2】:

      选择器中的方括号需要转义

      改变

      var checkboxes = $(":input[name^='form[r']");
      

      var checkboxes = $(":input[name^='form\[r']");
      

      【讨论】:

      • 您需要使用 \\ 对其进行双重转义:检查此小提琴:jsfiddle.net/NAwhN
      • 我不知道为什么,但它可以双向工作,无论是否逃脱。
      【解决方案3】:

      我建议使用此代码来选择/取消选择所有复选框:

      $('input#select-all').change(function(){
        var checked = $(this).prop('checked');
        $(":input[name^='form[r']").prop('checked', checked);
      });
      

      【讨论】:

        猜你喜欢
        • 2021-02-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-20
        • 2012-02-02
        • 2013-01-24
        • 2018-02-03
        相关资源
        最近更新 更多