如果这似乎很简单,我深表歉意,但我找不到问题所在。
这是我要使用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
答案 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);