2013-03-08 47 views
3

我想在輸入啓用或禁用時執行方法。是否有可能在jQuery中做?當元素被啓用或禁用時,是否可以觸發事件處理程序?

我想要做類似這樣(non-working code below)的東西: -

$('input').on('enabled', function(e){ 
    alert('Just now someone enabled : ' + $(this).attr('id')); 
    executeSomeHandlerForENABLED(); 
}).on('disabled', function(e){ 
    alert('Just now someone disabled : ' + $(this).attr('id')); 
    executeSomeHandlerForDISABLED(); 
}); 
+0

它適合你嗎? – Kangkan 2013-03-08 09:28:23

+0

你如何啓用或禁用輸入? – asifsid88 2013-03-08 09:28:35

+0

@Kangkan不,它不工作。編輯這個問題是否造成了一些混淆。 – 2013-03-08 09:33:16

回答

1

YES,但你正在嘗試不是一件容易的事。

你可以做的是,使用propertychange事件(順便說一句,在IE上不可用)來捕捉屬性的變化。

我使用Google搜索並找到了this解決方案。隨着它發生變化的插件。對於IE它回落到setTimeout()這確實是非常傷心。

不管怎麼說,利用該解決方案的解決辦法是這樣的:

$("input").watch('disabled', function() { 
    console.log($(this).is(":disabled")); 
}); 
2

是的,有!對於現代瀏覽器,正確的方法是使用MutationObservers。不幸的是,即使IE10支持MutationObservers,也不用擔心IE8和9.爲了支持IE 8-10,當設置禁用時,您需要自己觸發propertychange事件,爲此,您需要更改getter並設置您想要啓用/禁用的元素。

這裏有幾個關於這項技術的好文章:

不幸的是,你不能只是使用本地fireEvent上被禁用的事件二傳手內,因爲它服從於殘疾人狀態。因此我們需要一個外部事件觸發系統。幸運的是,jQuery中的好人已經做到了!

因此,有了這些知識,我寫了一個fireOnDisable jQuery插件。要使用它,只需將其應用到選擇例如:

$('#disabled_thing').fireOnDisable(); 

如果你在沒有原生支持的PropertyChange事件還是一個瀏覽器,這個插件會做什麼。它專門用於IE8-10。對於IE7或更低版​​本的用戶,由於他們不公開setter/getter函數,因此你被搞砸了。

+0

感謝您在6個月後回覆;)(開玩笑)。 Ye'MutationObserver'將會完成這項工作[Chrome自此以後就已經這麼做了)。順便說一句,我的情況很簡單。我知道一些無辜的開發人員正在使用jQuery來禁用和啓用按鈕。但我無法找到該代碼。所以我改變了jQuery.js中的代碼,這給了我禁用/啓用的確切位置。 [是的尼斯jQuery插件,upvoting] – 2013-11-04 11:15:35

相關問題