【问题标题】:Which jquery event to use?使用哪个 jquery 事件?
【发布时间】:2011-05-16 02:05:18
【问题描述】:

我有这样的代码,可以在选中复选框时启用或禁用 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() 事件,但发生了同样的情况。

有什么想法吗?

谢谢。

【问题讨论】:

    标签: javascript events checkbox jquery


    【解决方案1】:

    手动调用更改事件:

    $(":checkbox").change();
    

    【讨论】:

      【解决方案2】:

      对不起,如果我太简单了,但你不能让 JavaScript 在更改复选框值时手动调用事件吗?

      【讨论】:

        【解决方案3】:

        您可以尝试手动触发事件:

        $(":checkbox").attr('checked', true);
        $(":checkbox").change();
        

        $(":checkbox").attr('checked', true).change();
        

        【讨论】:

          【解决方案4】:

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

          制作

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

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

          【讨论】:

            【解决方案5】:

            你可以手动.trigger()change event

            $('input:checkbox').trigger('change');
            

            你不应该使用像:checkbox 这样的选择器。这是通用 * 选择器的隐式用法,它将查询您网站上的所有节点,这很糟糕,这意味着它很慢。

            input:checkbox 仍将查询您的所有复选框元素,您应该使用classid 来查询特定元素。

            参考:.trigger()

            【讨论】:

              【解决方案6】:

              首先,让我们精简事件处理程序,因为您将布尔值传递给 .attr('disabled', bool).checked 是一个布尔值,让我们利用它,如下所示:

              $(function(){
                $(":checkbox").change(function(){
                  $("input:text").attr('disabled', this.checked);
                });
              });
              

              然后,当以编程方式更改值时,也只需触发 change 事件,如下所示:

              $(":checkbox").attr('checked', true).change();
              

              不带参数的.change().trigger("change") 的快捷方式,它将导致您的事件处理程序运行。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2013-08-08
                • 2012-03-03
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多