jQuery:仅在浏览器重新加载时触发input:checkbox change()

时间:2018-07-27 20:11:23

标签: javascript jquery

如果这似乎很简单,我深表歉意,但我找不到问题所在。

这是我要使用jQuery控制的html部分:

<table id="my_table" class="tableCommon">
            <tbody>
                <tr>
                    <td class="control" colspan="3"><a name="SOME_NAME"></a><input value="1" name="SOME_NAME" disabled="" class="checkbox" type="checkbox">
                        <span class="checkbox-label">This is a checkbox label</span>
                    </td>
                </tr>

这是jQuery部分(开始脚本标签位于表的结束标签之后):

jQuery(document).ready(function(){

    //other stuff before it
    function changedValue(newVal){
        jQuery('table#my_table tr td:first-child input:checkbox').each(function(){
            if(this.name !== newVal){
                this.attr('checked', false);                
            }
        });
    }
    jQuery('table#my_table tr td:first-child input:checkbox').change(changedValue(this.name));
});

我在具有change()侦听器的选择器和changedValue函数中的if语句上都具有调试断点。当人们尝试检查复选框时,没有断点到达。重新加载页面时,代码不会在它们处停止。在同一jQuery块中,我省略了其他处理程序,但这些处理程序工作正常(基于事件)。

使用的jQuery版本是1.4.2 浏览器:Firefox开发人员版62.0b12

1 个答案:

答案 0 :(得分:3)

jQuery('table#my_table tr td:first-child input:checkbox').change(changedValue(this.name));

您正在此处调用方法changedValue,因为您正在使用参数进行调用。因此,绑定为处理程序的是从函数undefined返回的结果。您应该修改绑定以正确绑定。

//accept in the event that happened
function changedValue(e){
    //get the value off of the element that was changed, which exists on the event
    var newVal = e.target.name;

    //reduced the each to a filter
    jQuery('table#my_table tr td:first-child input:checkbox')
      .filter(function(){ return this.name != newVal; })
      .attr('checked', false);
}

//give change the function reference
jQuery('table#my_table tr td:first-child input:checkbox').change(changedValue);