【问题标题】:Hiding/Showing Fields Based On Radio Selection With simple_form使用 simple_form 隐藏/显示基于单选框的字段
【发布时间】:2013-06-25 03:48:44
【问题描述】:

我有一个表单,我需要用户选择(使用单选按钮)一个选项,该选项将确定其下方的下一个表单字段。在这种情况下,他们的帖子可以是帖子或帖子的修订。因此,选择“帖子”将显示标题字段(为帖子命名),选择“修订”将显示现有帖子的选择列表以供选择(标题将被继承)。

_form.html.erb

<!--Form inputs-->

<%= f.collection_radio_buttons :is_revision, [[false, 'Post'] ,[true, 'Revision']], :first, :last %>
<%= f.input :revision_id, collection: @originals, :input_html => {:id => 'revision'} %>
<%= f.input :title, :input_html => { :maxlength => '50', :placeholder => 'Title', :id => 'title'} %>

<!--Javascript-->

<script type="text/javascript">
$('input[name="post[is_revision]"]').on("change", function(){
    if ( $("#post_is_revision_true").attr("checked")){
        $("#title").hide();
        $("#revision").show();
    }
    if ( $("#post_is_revision_false").attr("checked")){
        $("#revision").hide();
        $("#title").show();
    }
});
</script>

我应该提到,这在隐藏和显示一个字段时效果很好,但在选择另一个单选按钮时没有任何变化。我觉得逻辑是正确的(虽然我不是最擅长 JS)但我似乎无法理解。

【问题讨论】:

    标签: javascript jquery ruby-on-rails forms simple-form


    【解决方案1】:

    编辑:我犯了一些 jQuery 错误。另外,here is a jsFiddle example

    试试这个。

    $('input[name="post[is_revision"]').change(function() {
        var selected = $('input:checked[name="post[is_revision]"]').val();
        if(selected == 'revision') {
            $('#title').hide();
            $('#revision').show();
        } else if(selected == 'new_post') {
            $('#revision').hide();
            $('#title').show();
        }
    });
    

    另一种方法,更小但更混乱:

    $('input[name="post[is_revision"]').change(function() {
        var is_revision = $('input:checked[name="post[is_revision]"]').val() == "revision";
    
        $('#title').toggle(!is_revision);
        $('#revision').toggle(is_revision);
    });
    

    如果总是首先选择一个,您可以将其浓缩为:

    $('input[name="post[is_revision"]').change(function() {
        $('#title').toggle();
        $('#revision').toggle();
    });
    

    或用于踢球、咯咯笑和滑行:

    $('input[name="post[is_revision"]').change(function() {
        $('#title').slideToggle();
        $('#revision').slideToggle();
    });
    

    如果您有任何问题,请发表评论。

    【讨论】:

    • 我尝试了所有这些,但仍然一无所获。顺便说一句,我感谢到目前为止的帮助。谢谢。
    • 你能用你的 html 和 javascript 创建一个 jsFiddle 吗?这样我就可以看到你确切的 html 结构了?
    • 我进行了编辑,看看是否有效。请务必查看我发布的 jsFiddle 链接。如果它不起作用,我可以得到你的 html 的副本吗?
    • jsFiddle 中的示例在更改了一些值后工作!
    猜你喜欢
    • 2014-08-27
    • 2019-05-19
    • 1970-01-01
    • 2018-07-15
    • 2011-05-26
    • 2019-09-16
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    相关资源
    最近更新 更多