2010-05-21 165 views
1

我试图根据是否有分配给它们的CSS类来过滤按钮事件。仍然触发过滤元素的jQuery点击事件

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

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

我想要得到的jQuery选择所有的按钮,当前有一个类“UI状态禁用”的。选择我使用看起来像这样:

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

当单击该按钮时,我会打电话给不同的功能,做一些东西,然后添加类的UI状态禁用“的按钮。但是该按钮仍然继续接受点击事件。

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

  1. 的事件绑定只在初始状态下结合的Click事件时,不承认一个新的类已加入以后看起来
  2. 我的过滤器[” ...:不(的.ui状态禁用)]是不正确的

任何意见?

回答

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处理程序中检查自己,就像我在上面的第二个选项中那样。

相关问题