2013-05-02 74 views
1

是否有一個事件處理程序(如.on('change' ..)添加到複選框,當它被禁用的方法嗎?添加事件處理函數時複選框被禁用

我想這個(見jsfiddle),但是當我將其禁用不火複選框:

$('#myCB').on('change', function() { 
    console.log('checkbox disabled? ' + $('#myCB').is(':disabled')); 
}); 

$('#myCB').prop('disabled', true); // does NOT trigger the function above 

編輯:我想的邏輯添加到複選框,只是因爲在我的應用程序,我不知道什麼時候該複選框可能會被禁用

回答

1

其實我剛剛發現這個好方法每個屬性更改時觸發更改事件:每次

var oldProp = $.fn.prop; 
var newProp = function() { 
    // console.log('$(..).prop() called'); 
    // execute jQuery's .prop() method 
    var retFunc = oldProp.apply(this, arguments); 
    // afterwards trigger custom event 
    this.trigger('property_changed', this); 
    return retFunc; 
} 
// replace jQuery's .prop() function with the new one 
$.fn.prop = newProp; 

現在我呼籲.prop()任何元素,它會自動觸發我的自定義更改事件。查看更新的jsfiddle

編輯:由於rahul maindargi在他的評論中提到,最好使用自定義事件而不是「更改」事件本身。我已更新我的代碼,以便它現在使用自定義事件。

+0

這是一個非常好的方式..只有當它將被觸發,只有當屬性發生變化發生在jQuery ...不是簡單的JavaScript。 – 2013-05-04 13:42:21

+0

是的,但由於我在整個應用程序中使用jQuery,並且不使用任何其他「純js」框架,因此我可以安全地使用此方法。 – Friederike 2013-05-06 08:41:59

2

SIM卡plest的方法應該是:

$('#myCB').prop('disabled', true).triggerHandler('change'); 
+0

但這意味着我必須手動觸發事件,無論我在哪裏禁用複選框。有沒有辦法自動了解財產何時更改? – Friederike 2013-05-02 11:12:47

+0

有觀察者,但在所有瀏覽器上都不可用,或者您需要添加一些JavaScript庫。你也可以創建自己的自定義事件。 – 2013-05-02 11:16:43

1

change事件時得到(所以當複選框選中得到)領域的值更改解僱。它在禁用上無效。

在禁用複選框時觸發事件可能很難做到。見here

+0

謝謝你的鏈接。 :)現在我知道它不能按照我的計劃完成。 :) – Friederike 2013-05-02 11:20:11

+0

更新:使用jQuery實際上並不那麼棘手,當複選框被禁用時觸發事件。 – Friederike 2013-05-03 12:00:15

1

我最好的猜測是你想要聽DOM變異事件。你可以通過DOM突變事件來做到這一點,就像任何正常的JavaScript事件,如鼠標點擊。

請參閱本:http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-MutationEvent

例子:

$("element-root").bind(DOMSubtreeModified,"CustomHandler"); 
+0

謝謝你的建議。雖然我不確定我想這樣做。這聽起來有些複雜,所以我想我會堅持手動觸發「更改」事件。 ;) – Friederike 2013-05-02 11:23:16

+1

如果你要'手動'觸發,至少在Jquery中使用'自定義事件'。如果您使用更改,可能會有問題,如果您想要聽取實際更改事件 – 2013-05-03 03:33:55

+0

非常好的點rahul!考慮到您的意見,我修改了我的答案。謝謝。 – Friederike 2013-05-03 12:00:58

相關問題