【问题标题】:Unbind checkbox with jQuery keeping functionality使用 jQuery 保持功能取消绑定复选框
【发布时间】:2012-12-07 23:56:07
【问题描述】:

我正在尝试使用几个简单的复选框来解决一个问题,我想使用这些复选框来显示/隐藏(切换)div,但需要保留复选框的值,这意味着它们不能使用禁用属性,因为如果是这样, 他们不会被提交。所以基本上我正在尝试的是禁用单击已选中的复选框以避免单击相同的复选框并切换 div。只有未选中的复选框应该是可点击的,并且通过继承 div 将切换。 (我的问题是复选框,而不是 div 切换)

<input type="radio" id="cc_email0" name="form[cc_email]" value="0" checked="checked">
<input type="radio" id="cc_email1" name="form[cc_email]" value="1">

<div id="for_cc_mail0" style="display: block">The div content for 0</div>
<div id="for_cc_mail1" style="display: none">The div content for 1</div>

提前感谢您的帮助! M

【问题讨论】:

  • 为什么不直接禁用它们,然后在提交之前重新启用复选框?
  • 为什么需要禁用它们?如果有人点击已经选择的 RADIO 按钮,那么它只会使已经可见的元素可见,因此没有明显的效果。
  • @Bob,不,因为附加的 toggle() 在 div 链行为中。无论是否选中,单击相同的复选框都会切换 div。那是我的问题。
  • @Mario gotchya。您还可以使用 jQuery 过滤器链 .is(':visible') 这是我最喜欢的针对这种情况的工具之一。只需在显示或隐藏之前检查#for_cc_mail 是否可见。答案几乎是什么,只是更具可读性(对我而言)
  • 谢谢 Bob,我会把它作为参考。我决定放弃 toggle(),只使用 show() 和 hide()。事实上,是 toggle() 搞砸了看似相当简单的事情。谢谢!

标签: jquery click toggle bind checkbox


【解决方案1】:

您的输入是单选按钮而不是复选框。除了禁用输入,您可以尝试:

var $div = $('div');
$('input[type=radio]').change(function(){
   $div
     .hide()
     .filter('[id="for_'+this.id+'"]')
     .show();
})

http://jsfiddle.net/sPy2g/

请注意,我已将复选框的 ID 从 cc_email* 更改为 cc_mail*

【讨论】:

  • 谢谢!需要使用标记对其进行测试,但似乎这是解决方案。我会在测试后尽快回来。谢谢
  • 嗯...我真正需要的是禁用单击或取消绑定单击才能工作。用你的例子,这行得通,我需要改变切换()已经完成的大部分工作
  • 好的,找到解决问题的方法了。只需更改我拥有的切换()并在 id 单击时执行 show()/hide()。再次感谢您的帮助!
猜你喜欢
  • 2013-03-20
  • 1970-01-01
  • 2011-10-10
  • 2013-03-25
  • 1970-01-01
  • 2016-06-06
  • 1970-01-01
  • 2016-05-26
  • 2015-01-15
相关资源
最近更新 更多