0

我有一个包含选择器的表单。有一个“添加新”选项,当它被选中时,会使用 jquery 动态生成一个文本输入。现在我需要做的是在提交时检查是否存在文本输入,如果存在,则使用其中的信息更新表格并忽略选择器。我的问题是我应该在带有表单验证的模型中这样做吗?或者有没有更合适的方法?

选择器:

<%= builder.select(:line_id, ['~ Add New ~'] + Line.all.collect {|p| [p.title, p.id ]}, { :include_blank => 'select line' }, :id => "line_selector")

jQuery:

$(document).ready(function(){
    $("#line_selector").on("change", function() {
        if($(this).prop("selectedIndex") == 1) { 
            console.log($("#line_selector").prop("selectedIndex"));
            var new_line_title = prompt('Please enter a line title');
            if(!new_line_title.length) {
                console.log("no entry");
                return;
            };
            console.log(new_line_title);
            $(this).after($(document.createElement("input"))
                .attr("type", "text")
                .attr("id", "text")
                .attr("name", "text")
                .attr("value", new_line_title));
        };
    });
}); 

在此处输入图像描述

4

2 回答 2

0

我不知道是否有更好的方法,但正如您所提到的,我会在模型中使用自定义验证来实现。对我来说,这是定义应用程序行为的最佳场所。

于 2013-02-15T16:42:01.010 回答
0

我只需要一个用于文本字段的 attr_accesor 并在您的模型中有一个 after_initialize 回调来设置 line 属性。

此外,这与您的问题本身无关,但是您是否打算在从下拉列表中选择其他值时隐藏输入?如果是这样,而不是动态添加元素,为什么不直接切换()并禁用/启用文本字段?

于 2013-02-15T19:40:07.730 回答