代码之家  ›  专栏  ›  技术社区  ›  Phil.Wheeler

jquery click事件仍在筛选元素上激发

  •  1
  • Phil.Wheeler  · 技术社区  · 15 年前

    我试图根据按钮事件是否分配了CSS类来筛选它们。

    假设我有一个这样的按钮:

    <button id="save-button" class="ui-state-default ui-corner-all">Save</button>
    

    我想让jquery选择当前所有按钮 具有“禁用用户界面状态”类。我使用的选择器如下所示:

    $('#save-button:not(.ui-state-disabled)').click(function() {
       ...
    });
    

    单击按钮后,我将调用另一个函数,执行一些操作,然后将类“ui state disabled”添加到按钮中。但是按钮仍然继续接受单击事件。

    我猜这是因为两个可能的原因:

    1. 事件绑定器在绑定click事件时只查看初始状态,并且不识别稍后添加的新类。
    2. 我的过滤器[……:not(.ui state disabled)]不正确

    有什么意见吗?

    1 回复  |  直到 15 年前
        1
  •  3
  •   Nick Craver    15 年前

    你可以使用 .live() 做你想做的,像这样:

    $('#save-button:not(.ui-state-disabled)').live('click', function() {
       ...
    });
    

    或者,当 click 处理程序激发,如下所示:

    $('#save-button').click(function() {
      if($(this).hasClass('ui-state-disabled')) return;
      ...
    });
    

    您的1是正确的,原因是,选择器查找匹配的元素 那时 并将一个单击处理程序绑定到它们……不管它们以后拥有什么类或ID,处理程序都绑定到元素。 LIVER() 监听气泡并检查选择器是否匹配 当事件发生时 ,所以它是有效的…或者你检查自己 点击 像上面第二个选项中的处理程序一样。