1

フォームにいくつかのチェックボックスがあります。チェックすると、非表示フィールドがフォームに追加されます。

最初はいくつかのチェックボックスがオンになっていますが、HTML を変更して関連する隠しフィールドを含めたくありません。代わりに、ページが最初に読み込まれたときに、同じコードをトリガーして隠しフィールドを自動的に追加できるようにしたいと考えています。

私はこのようなことを試しましたが、運がありません:

container.find("input[data-subscribe]").on("change load", function()
// ------------------------------------------------^^^^ Thought adding load here
//                                                      might do what I want.
{
    var lists = $(this).data("subscribe").toString();
    lists = lists.split(";");

    for(var i = 0; i < lists.length; i++)
    {
        var list = lists[i];

        if($(this).is(":checked")) container.prepend('<input type="hidden" name="lists" value="' + list + '">');
        else container.find("input[type=hidden][value=" + list + "]").remove();
    }

});

もちろん、コードをコピーして$(document).ready()ハンドラーに入れることもできますが、上記onに追加できるイベントがあれば、はるかにクリーンになります。

4

2 に答える 2

1

dom の準備ができたら、変更イベントをトリガーするだけです

container.find("input[data-subscribe]").change()

または

container.find("input[data-subscribe]").trigger('change')
于 2013-06-24T03:12:45.110 に答える
0

関数でラップし、両方のハンドラーから呼び出します。

function someCheckboxfunction(lists) {
    lists = lists.split(";");

    for(var i = 0; i < lists.length; i++)
    {
        var list = lists[i];

        if($(this).is(":checked")) {
            container.prepend('<input type="hidden" name="lists" value="' + list + '">');
        }
        else {
            container.find("input[type=hidden][value=" + list + "]").remove();
        }
    }
}

呼び出しコード

$(document).ready(function() {        
    container.find(("input[data-subscribe]").on("change", function() { 
        someCheckboxFunction($(this).data("subscribe").toString()) 
    });

    var lists = container.find("input[data-subscribe]").data("subscribe").toString();
    someCheckboxFunction(lists);
});
于 2013-06-24T02:57:59.470 に答える