2010-05-21 115 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處理程序中檢查自己,就像我在上面的第二個選項中那樣。