我有一个这样的代码,用于在标记复选框时启用或禁用som文本输入。
$(document).ready(function(){
$(":checkbox").change(function(){
if(this.checked){
$("input:text").attr('disabled', true);
} else {
$("input:text").attr('disabled', false);
}
});
});
当用户点击复选框时似乎有效,但javascript可以通过调用来更改复选框值:
$(":checkbox").attr('checked', true);
当javascript更改复选框时,不会触发事件。我尝试过click()事件但是发生了同样的事情。
有什么想法吗?
感谢。
答案 0 :(得分:4)
首先,让我们减少那些事件处理程序,因为你将布尔值传递给.attr('disabled', bool)
而.checked
是一个布尔值,让我们利用它,就像这样:
$(function(){
$(":checkbox").change(function(){
$("input:text").attr('disabled', this.checked);
});
});
然后以编程方式更改值时,也会触发change
事件,如下所示:
$(":checkbox").attr('checked', true).change();
不带参数的 .change()
是.trigger("change")
的快捷方式,会导致您的事件处理程序运行。
答案 1 :(得分:1)
手动调用更改事件:
$(":checkbox").change();
答案 2 :(得分:1)
很抱歉,如果我太简单了,但是当你更改复选框值时,你不能让JavaScript手动调用该事件吗?
答案 3 :(得分:1)
您可以尝试手动触发事件:
$(":checkbox").attr('checked', true);
$(":checkbox").change();
或
$(":checkbox").attr('checked', true).change();
答案 4 :(得分:1)
您可以手动.trigger()
change event
:
$('input:checkbox').trigger('change');
你永远不应该使用像:checkbox
这样的选择器。它是通用*
选择器的隐式用法,它将查询您网站上的所有节点,这非常糟糕,这意味着它非常慢。
input:checkbox
仍然会查询您的所有复选框元素,您应该使用class
或id
来查询特定元素。
参考:.trigger()
答案 5 :(得分:0)
我不知道为什么通过javascript更改复选框不会触发事件。 但是,我有一个解决方案。
制作
function(){
if(this.checked){
$("input:text").attr('disabled', true);
} else {
$("input:text").attr('disabled', false);
}
}
作为一种功能。 比如函数cb_change_handler(){...} 当你通过javascript更改值时,你可以手动使用这个功能。