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 コールバックを設定して行属性を設定するだけです。

また、ご質問自体とは関係ありませんが、ドロップダウンから他の値を選択する際に入力を非表示にする予定はありますか? もしそうなら、要素を動的に追加する代わりに、単に toggle() してテキストフィールドを無効/有効にしてみませんか?

于 2013-02-15T19:40:07.730 に答える