[英]Which Click event handler is to use when changing the content dynamically in jQuery?
[英]Which jquery event to use?
当有一个复选框被标记时,我有一个这样的代码来启用或禁用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()事件但是发生了同样的事情。
任何的想法?
谢谢。
首先,让我们减少那些事件处理程序,因为你将布尔值传递给.attr('disabled', bool)
并且.checked
是一个布尔值,让我们利用它,如下所示:
$(function(){
$(":checkbox").change(function(){
$("input:text").attr('disabled', this.checked);
});
});
然后以编程方式更改值时,也会触发change
事件,如下所示:
$(":checkbox").attr('checked', true).change();
没有参数的.change()
是.trigger("change")
的快捷方式,这将导致您的事件处理程序运行。
手动调用change事件:
$(":checkbox").change();
很抱歉,如果我太简单了,但是当你更改复选框值时,你不能让JavaScript手动调用该事件吗?
您可以尝试手动触发事件:
$(":checkbox").attr('checked', true);
$(":checkbox").change();
要么
$(":checkbox").attr('checked', true).change();
您可以手动将.trigger()
change event
:
$('input:checkbox').trigger('change');
你永远不应该使用像:checkbox
这样的选择器。 它是通用*
选择器的隐式用法,它将查询您站点上的所有节点,这非常糟糕,这意味着它非常慢。
input:checkbox
仍将查询所有复选框元素,您应该使用class
或id
来查询特定元素。
参考: .trigger()
我不知道为什么通过javascript更改复选框不会触发事件。 但是,我有一个解决方案。
使
function(){
if(this.checked){
$("input:text").attr('disabled', true);
} else {
$("input:text").attr('disabled', false);
}
}
作为一个功能。 比如函数cb_change_handler(){...}和u可以在通过javascript更改值时手动使用此函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.