Rails - 更改字段是否显示或不依赖于选择 - 不太合适

时间:2012-10-05 13:57:01

标签: jquery ruby-on-rails forms select

我有一个表单,如果用户从下拉列表中选择“其他”,则会在下面显示“其他 - 请指定”字段。但是,它并不是很有效。如果我为“请指定”字段设置了display:none,那么当表单保存并且用户返回进行编辑时,他们看到的只是选择框,而不是“请指定”字段。

我知道为什么会这样 - 这是因为在show事件触发之前,jQuery正在等待用户更改选择框。

但是,如果我从CSS中删除display:none,那么当用户首次显示表单时,无论选择框中显示什么,他们都会看到选择框和“请指定”字段。我该怎么做才能解决这个问题?我可以在页面加载时执行代码的“if”块,但不知道如何执行此操作?谢谢!

<script>
$(function(){
    $("#pref_select").change(function(){
        if ($("#pref_select").val()=="Other"){
            $("#other-pref").show(500);
        } else {
            $("#other-pref").hide();
        }
    })
})
</script>

<div class="field">
  <%= f.label :pref %><br />
  <%= f.select :pref, ["", "1", "2", "Other"], {:id => "pref_select"} %>
</div>

<div class="field" id="other-pref">
  <%= f.label "Other - please specify" %><br />
  <%= f.text_area :other_pref %>
</div>

1 个答案:

答案 0 :(得分:0)

如果要在页面加载时触发检查,则触发更改事件。您绑定了更改事件,但只有在触发后才会进行检查。因此,要获得所需的效果,您需要在页面加载时触发change()

$("#pref_select").change(function() {
    if ($("#pref_select").val() == "Other") {
        $("#other-pref").show(500);
    } else {
        $("#other-pref").hide();
    }
}).change()​ // <-- this triggers the change event