2013-02-17 76 views
2

我有一個多選場形式的禁用表單字段不起作用

<select multiple="multiple" name="A"></select> 

和一個布爾複選框乙

<input type="checkbox" name="B" /> 

我想禁用領域的,如果場B被檢查。如果字段B取消選中,我想重新啓用字段A.

我嘗試這樣做:

$('input[name="B"]').toggle(function() { 
    $('select[name="A"]').addClass('uneditable-input').attr('disabled', 'disabled'); 
}, function() { 
    $('select[name="A"]').removeClass('uneditable-input').removeAttr('disabled'); 
}); 

但是,這是行不通的。相反,它使複選框從我的網頁上消失。我怎樣才能實現我上面描述的?

+1

功能切換事件已在1.9中刪除。他沒有錯,它有點混亂,他們只是刪除它 – mplungjan 2013-02-17 12:12:45

+0

可能重複[Where fn.toggle(handler(eventObject),handler(eventObject)...)gone?](http://stackoverflow.com/ questions/14301935/where-has-fn-toggle-handlereventobject-handlereventobject-gone) – mplungjan 2013-02-17 12:14:09

+0

@mplungjan事實上,他們刪除了切換事件。我正在使用切換動畫方法。但切換事件仍然記錄在[這裏](http://api.jquery.com/toggle-event/)以及它已被刪除的說法非常小。我只是忽略了它。 – pemistahl 2013-02-17 12:15:48

回答

3

我該如何實現我上面描述的?

代替toggle,使用click掛鉤(單個)處理,然後將處理程序中,檢查this.checkedB是否被選中。

$('input[name="B"]').click(function() { 
    if (this.checked) { 
     $('select[name="A"]').addClass('uneditable-input').attr('disabled', 'disabled'); 
    } 
    else { 
     $('select[name="A"]').removeClass('uneditable-input').removeAttr('disabled'); 
    } 
}); 
+0

@mplungjan:是的,謝謝,我剛剛看到您對該問題的評論並轉向文檔後刪除了第一位。我不知道那個版本的'toggle'存在! (我想,我可以繼續,現在忘掉它...... ;-)) – 2013-02-17 12:14:22

+0

是的,這不是一個已知的函數,並且你不是第一個在面對可憐的不知情的受害者時做RTFM的;)) ) – mplungjan 2013-02-17 12:15:44

+0

@TJCrowder謝謝你,你的解決方案工作正常。 :)我剛剛升級到jQuery 1.9,並沒有意識到切換事件已被刪除。文檔中的提示不是很明顯,這就是我忽略它的原因。 – pemistahl 2013-02-17 12:23:17