jQuery click事件仍然在过滤的元素上触发

时间:2010-05-21 01:44:53

标签: jquery events css-selectors

我正在尝试根据是否有分配给他们的CSS类来过滤按钮事件。

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

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

我想让jQuery选择当前具有“ui-state-disabled”类的所有按钮。我正在使用的选择器如下所示:

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

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

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

  1. 事件绑定器仅在绑定click事件时仅查看初始状态,并且无法识别稍后添加了新类
  2. 我的过滤器['...:not(.ui-state-disabled)]不正确
  3. 有任何意见吗?

1 个答案:

答案 0 :(得分:3)

您可以使用.live()做您想做的事情,如下所示:

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

或者,在click处理程序触发时检查类,如下所示:

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

你的#1是正确的,选择器找到那时与匹配的元素并将点击处理程序绑定到它们......无论后来他们有什么类或ID ,处理程序绑定到元素。 .live()侦听气泡并检查选择器在事件发生时匹配 ,因此它可以正常工作......或者你在click处理程序中检查自己,就像我在第二个上面的选项。