Ruby on rails:选择某个下拉列表时显示文本框的简便方法

时间:2013-05-07 15:38:07

标签: jquery ruby-on-rails ruby ruby-on-rails-3

现在,

我有以下jquery,css和html代码,它按我想要的方式工作。 Where如果用户选择下拉列表,则会显示某个文本框。但是我怎样才能在轨道上轻松完成?

HTML

<form>
    <select id="sel">
        <option value="">- select -</option>
        <option value="option1">Option 1</option>
        <option value="option2">Option 2</option>
        <option value="option3">Option 3</option>
        <option value="option4">Option 4</option>
        <option value="other">Other</option>
    </select>
    <label id="label1" for="option1">Text box label 1
        <input type="text" id="option1" />
    </label>
    <label id="label2" for="option2">Text box label 2
        <input type="text" id="option2" />
    </label>
    <label id="label3" for="option3">Text box label 3
        <input type="text" id="option3" />
    </label>
    <label id="label4" for="option4">Text box label 4
        <input type="text" id="option4" />
    </label>
    <label id="label5" for="option5">Other
        <input type="text" id="option5" />
    </label>
</form>

CSS

label {
    display:block;
}

JQUERY

$(function() {
    //This hides all initial textboxes
    $('label').hide();
    $('#sel').change(function() {
        //This saves some time by caching the jquery value
        var val = $(this).val();
        //this hides any boxes that the previous selection might have left open
        $('label').hide();
        //This just opens the ones we want based off the selection
        switch (val){
            case 'option1':
                $('#label1').show();
                break;
            case 'option2':
                $('#label2').show();
                break;
            case 'option3':
                $('#label1').show();
                break;        
        }
    });

});

Rails代码

<%= f.select(:title, ["Select an option","Option 1", "Option 2", "Option 3"])%>

但我不确定如何显示文本框。选择选项我这里只有3。但在我的应用程序中,将会有10-15。

由于

2 个答案:

答案 0 :(得分:1)

您应该在选项和HTML ID之间使用约定来显示。

如果您的选项具有静态值,则匹配现有标签,您可以执行以下操作:

$(function() {
    $('label').hide();
    $('#sel').change(function() {
        var val = $(this).val();
        $('label').hide();
        $('#label'+val).show():
    });
});

使用此功能,您不必处理每个选项,只需添加相应的选项/标签ID。

答案 1 :(得分:0)

尝试获取下拉列表的selectedIndex属性,而不是对ID进行硬编码;索引从0开始(零)

var i = getElementById('sel').selectedIndex ;
$('#label'+i).show();
$('#option'+i).show();

这是可扩展的,因此如果您将来添加选项,它将起作用。