2013-02-17 44 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