使用哪个jquery事件?

时间:2010-11-26 08:49:47

标签: javascript events checkbox jquery

我有一个这样的代码,用于在标记复选框时启用或禁用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()事件但是发生了同样的事情。

有什么想法吗?

感谢。

6 个答案:

答案 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仍然会查询您的所有复选框元素,您应该使用classid来查询特定元素。

参考:.trigger()

答案 5 :(得分:0)

我不知道为什么通过javascript更改复选框不会触发事件。 但是,我有一个解决方案。

制作

function(){
        if(this.checked){
            $("input:text").attr('disabled', true);
        } else {
            $("input:text").attr('disabled', false);
        }
      }

作为一种功能。 比如函数cb_change_handler(){...} 当你通过javascript更改值时,你可以手动使用这个功能。