2012-01-20 63 views
0

我使用Khavilo德米特里的jQuery checkbox code複選框和單選按鈕。這看起來不錯,但他的禁用代碼不起作用。如預期的那樣,該按鈕變灰,但仍然響應鼠標點擊。禁用的輸入仍然響應鼠標事件綁定禁用

我猜測,問題是,他結合禁用如下:

var ch = this; /* Reference to DOM Element*/ 
... 
$ch.bind('disable', function() {ch.wrapperInner.addClass(settings.cls+'-disabled');}) 
    .bind('enable', function() {ch.wrapperInner.removeClass(settings.cls+'-disabled');}); 

這段代碼刪除任何默認綁定,將禁用鼠標事件?謝謝。

+0

我不確定你的意思是它沒有工作。按照預期,點擊他網站上禁用的示例什麼也不做。瀏覽器問題可能? – Jere

+0

在我的代碼中,當輸入被禁用時,它會變灰,但點擊它仍會觸發鼠標事件(在多個瀏覽器上)。 KD網站上的代碼不是(我認爲)在單擊禁用按鈕時打算做任何事情,因此它不會測試事件。爲了所有的意圖和目的,禁用的按鈕僅僅是圖像。即使啓用的按鈕似乎沒有任何事件註冊(我想,在快速瀏覽Firebug後)。 – EML

回答

0

代碼做的唯一的事情是綁定功能的事件「禁用」 &「啓用」

當「禁用」事件被觸發他加入了類jquery-checkbox-disabled到內部跨度。他在啓用事件中刪除它。

正如你可以看到,該複選框並獲得殘疾,但能提供您自定義外觀的元素都只是普通的跨度,其仍然點擊。

看來,德米特里正在將這些跨度的點擊事件傳遞給隱藏的複選框。

a.wrapper.click(function(e) { 
       b.trigger('click', [e]); 
       i(e); 
       return false 
      }); 

這就是爲什麼即使它被禁用,您仍然可以獲得複選框的點擊事件。該複選框正在編程式點擊。

因此,如果你的問題是你正在嘗試檢測複選框已經改變,那麼我建議你使用改變事件,因爲它似乎沒有遭受同樣的問題。

http://jsfiddle.net/vW6gj/

+0

謝謝 - 非常好的jsfiddle,但不幸的是,在FF(僅一個盒子),Opera(禁用忽略)和Chrome(似乎是OK)方面表現不同。但是,我無法真正使用更改事件。我需要確保用戶沒有點擊禁用的框,因爲它仍然觸發我自己的事件,並且一切都出錯了,因爲我認爲無法點擊禁用的框。我有一個選擇是在我收到活動時檢查這個盒子是否被禁用,但那只是感覺不對。任何想法爲什麼德米特里必須通過點擊事件,或隱藏的盒子是什麼? – EML

+0

隱藏複選框是您的原始複選框。這就是你將點擊事件綁定到你的狀態(檢查或不檢查)的狀態。因此,他必須將點擊事件傳遞給隱藏的複選框。這樣你的事件就會觸發,你可以檢查盒子的狀態。你可以修改他的插件並在'a.wrapper.click(...')中添加一個檢查來確保複選框在觸發點擊之前不被禁用。除此之外,在您的點擊事件中檢查禁用可能是您唯一的其他選項。 –

相關問題