编辑表单时显示/隐藏持久性,其中单选按钮用于显示/隐藏表单元素

此代码正在运行,但必须有更好的方法在Jquery脚本中执行此操作。

这是我的单选按钮

 'lc' %>Cash  'rb' %>Asset  'ab' %>Supplies 

而且现在我隐藏了一下。

  
A drop down list to be shown

而Jquery部分

 $j(document).ready(function(){ $j("input[id='lc']").change(function() { $j("#asset_list").hide(); } ); $j("input[id='rb']").change(function() { $j("#asset_list").show("slide"); } ); $j("input[id='ab']").change(function() { $j("#asset_list").hide(); } ); } ); 

在选中的单选按钮上呈现标记

  

虽然它有效,但我确信有更好的方法可以做到这一点,所以我会要求重构帮助。

提前谢谢了

ED1。 我已经意识到这是一个Jquery问题,需要它来检查是否检查了“input [id =’rb’]”(来自db)然后检查$ j(“#asset_list”)。show(); 无需更改监听器

首先,我会给他们所有相同的名字,将他们组合在一起。

 $j("input[name='btnGroupName']").change(function() { if($('#rb').is(':checked')) { $j("#asset_list").show("slide"); }else{ $j("#asset_list").hide(); } }); 

只是为了整理一切,并陈述一些陷阱。 继续最后的代码。

我的单选按钮在视图中。

 <%= f.radio_button :loss_type, "cash", :id => 'button_cash', :class => 'lt'%>Cash <%= f.radio_button :loss_type, "asset", :id => 'button_asset', :class => 'lt'%>Asset <%= f.radio_button :loss_type, "supplies",:id => 'button_supplies', :class => 'lt'%>Supplies 

您不能使用:为此名称,单选按钮组名称是使用Rails魔术创建的,更改这意味着您的数据不会保存到数据库。

创建的名称是例如name =“asset_loss [loss_type]”,它反映了“model [:field]”。 你可以使用它,但Jquery会因为没有正确封装的“”而绊倒它。

例如

 $j("input[name="asset_loss[loss_type]"]").change(function() { 

这意味着这些块是“input [name =”和“]”并且不起作用。

所以最终的JQuery代码是

 $j(document).ready(function(){ $j("input[class='lt']").change(function() { if($j('#button_asset').is(':checked')) { $j("#asset_list").show(); }else if ($j('#button_cash').is(':checked')){ $j("#cash_type").show(); }else if($j('#button_supplies').is(':checked')){ // TODO : Partial for stationery } }); 

这将很好。 但是回到了持久性的主要问题。 此JQuery代码仅在发生更改时才会执行。 所以当你回到页面(或重新加载)时,它不会从数据库读取,检查值是什么,并适当地显示/隐藏字段。

为此,我重复了上面的所有JQuery代码但改变了

 $j("input[class='lt']").change(function() { 

 $j("input[class='lt']").each(function() { 

现在,如果有人知道如何将这两者串在一起并使其干燥,欢迎发表评论。 希望这可以帮助那些尝试这样做的人。