是否存在在下拉菜单中创建“其他”选项的插件,并在选择“其他”时为替代输入创建文本框?

时间:2011-01-21 15:44:39

标签: javascript ruby-on-rails forms ruby-on-rails-3

我有一个包含多个下拉选择框的多页表单。大多数这些盒子需要有一个“其他”字段,然后输入一个不是选择值之一的内容。提交表单后,如果选择“其他”,则应将“其他”内容保存到数据库中以代替下拉菜单。

是否有一个已经编写的插件或脚本可以轻松地为我执行此操作?我的很多字段都是动态创建的,必须稍后编辑(使用嵌套的表单jquery插件),因此编写适用于所有字段的代码(不为每个字段编写特定的函数)对我来说很难。

如果我找不到合适的插件,我可能会使用Dojo dijit Combobox,虽然这完全符合我的要求,但我的用户的理想选择是一个选择框插件,其中包含“其他” “下拉列表中的选项,当选择”其他“时,会出现一个文本框供用户填写。在编辑字段时,还需要根据存储在数据库中的值适当地填充下拉列表或文本框。这样的事情是存在于javascript / jquery / prototype / other,还是rails 3插件或gem?非常感谢!

编辑:如果我找不到具有单独文本区域的内容,我很可能会使用FlexBox - 但我仍然在寻找单独的文本区域解决方案!

1 个答案:

答案 0 :(得分:0)

我把一个可能做你想做的小脚本放在一起:http://jsfiddle.net/nHh3C/ 绝对可以改进,但我想你明白了。可能实际上自己使用它:D

这是JS:

$('select').each(function(i, select){
    if (!$(select).data('name')) {
        $(select).data('name', $(select).attr('name'));
    } 
    $(select).change(function(){
        if ($(this).val() == 'other') {
            $('<input/>', {
                'name' : $(this).attr('name')
            }).insertAfter($(this)); 
            $(this).attr('name', '');
        } else {
            $('input[name='+$(this).data('name')+']').remove();
            $(this).attr('name', $(this).data('name'));
        }
    });
});

修改 啊,并且这不清楚 - 它使用jQuery。只需将select选择器更改为您需要的选项即可。也不难将其包装在插件中。

编辑2 使用rails你应该可以做这样的事情(可能在助手中更好)来生成选择:

select("post", "person_id", Person.all.collect {|p| [ p.name, p.id ] } << ['Other', 'other'])

对于编辑视图,您只需检查该值是否包含在选择值中,如果不包含,则打印其他输入字段并将选择设置为预先选择“其他”选项。你应该处理JS来匹配这种情况。