如何使用jQuery显示/隐藏基于单选buttonselect的div?
我有一些单选button,我希望有不同的隐藏的div显示基于哪个单选button被选中。 这是HTML的样子:
<form name="form1" id="my_form" method="post" action=""> <div><label><input type="radio" name="group1" value="opt1">opt1</label></div> <div><label><input type="radio" name="group1" value="opt2">opt2</label></div> <div><label><input type="radio" name="group1" value="opt3">opt3</label></div> <input type="submit" value="Submit"> </form> .... <style type="text/css"> .desc { display: none; } </style> .... <div id="opt1" class="desc">lorem ipsum dolor</div> <div id="opt2" class="desc">consectetur adipisicing</div> <div id="opt3" class="desc">sed do eiusmod tempor</div>
这里是我的jQuery:
$(document).ready(function(){ $("input[name$='group2']").click(function() { var test = $(this).val(); $("#"+test).show(); }); });
我这样做的原因是因为我的单选button和div是dynamic生成的(单选button的值总是有相应的div)。 上面的代码部分工作 – divs会显示何时检查正确的button,但我需要添加一些代码,使divs一旦button被取消选中隐藏。 谢谢!
更新2015/06
由于问题发布后jQuery已经发展,现在推荐的方法是使用$.on
$(document).ready(function() { $("input[name=group2]").on( "change", function() { var test = $(this).val(); $(".desc").hide(); $("#"+test).show(); } ); });
或者在$.ready()
$(document).on( "change", "input[name=group2]", function() { ... } );
原始答案
您应该使用.change()
事件处理程序:
$(document).ready(function(){ $("input[name=group2]").change(function() { var test = $(this).val(); $(".desc").hide(); $("#"+test).show(); }); });
应该pipe用
在展示之前先将它们隐藏起来:
$(document).ready(function(){ $("input[name$='group2']").click(function() { var test = $(this).val(); $("div.desc").hide(); $("#"+test).show(); }); });
$(document).ready(function(){ $("input[name=group1]").change(function() { var test = $(this).val(); $(".desc").hide(); $("#"+test).show(); }); });
在这个例子中是正确的input[name=group1]
。 但是,感谢代码!
一个有趣的解决scheme是使这个声明:你只是给每个div应该显示一个属性automaticallyVisibleIfIdChecked
与它所依赖的checkbox或单选button的ID。 也就是说,你的表单看起来像这样:
<form name="form1" id="my_form" method="post" action=""> <div><label><input type="radio" name="group1" id="rdio1" value="opt1">opt1</label></div> <div><label><input type="radio" name="group1" id="rdio2" value="opt2">opt2</label></div> </form> .... <div id="opt1" automaticallyVisibleIfIdChecked="rdio1">lorem ipsum dolor</div> <div id="opt2" automaticallyVisibleIfIdChecked="rdio2">consectetur adipisicing</div>
并有一些页面独立的JavaScript很好地使用函数式编程:
function executeAutomaticVisibility(name) { $("[name="+name+"]:checked").each(function() { $("[automaticallyVisibleIfIdChecked=" + this.id+"]").show(); }); $("[name="+name+"]:not(:checked)").each(function() { $("[automaticallyVisibleIfIdChecked=" + this.id+"]").hide(); }); } $(document).ready( function() { triggers = $("[automaticallyVisibleIfIdChecked]") .map(function(){ return $("#" + $(this).attr("automaticallyVisibleIfIdChecked")).get() }) $.unique(triggers); triggers.each( function() { executeAutomaticVisibility(this.name); $(this).change( function(){ executeAutomaticVisibility(this.name); } ); }); });
类似的,你可以自动启用/禁用表单字段的automaticallyEnabledIfChecked
EnableEnabledIfChecked属性。
我认为这个方法很好,因为它避免了为你的页面创build特定的JavaScript – 你只需要插入一些属性来说明应该做什么。
简单的jquery源码相同 –
$("input:radio[name='group1']").click(function() { $('.desc').hide(); $('#' + $("input:radio[name='group1']:checked").val()).show(); });
为了使它更适合只是添加检查到第一个选项 –
<div><label><input type="radio" name="group1" value="opt1" checked>opt1</label></div>
从样式中删除.desc类和修改divs –
<div id="opt1" class="desc">lorem ipsum dolor</div> <div id="opt2" class="desc" style="display: none;">consectetur adipisicing</div> <div id="opt3" class="desc" style="display: none;">sed do eiusmod tempor</div>
它会真的看起来不错。
<script type="text/javascript"> $(function() { $("[name=toggler]").click(function(){ $('.toHide').hide(); $("#blk-"+$(this).val()).show('slow'); }); }); </script> </head> <body> <label><input id="rdb1" type="radio" name="toggler" value="1" />Book</label> <label><input id="rdb2" type="radio" name="toggler" value="2" />Non-Book</label> <div id="blk-1" class="toHide" style="display:none"> <form action="success1.html"> Name1:<input type="text" name="name"> <input type="submit" name="submit"> </form> </div> <div id="blk-2" class="toHide" style="display:none"> <form action="success1.html"> Name2:<input type="text" name="name"> <input type="submit" name="submit"> </form> </div>