25

内部にいくつかの選択があるフォームがあります。次のように、これらの選択に select2 jquery プラグインを適用しています。

$("select.company_select, select.positions_select").select2();

選択は正常に機能しますが、フォームを自動送信するためのこのコードがあります (フォームタグに自動送信クラスがあります)。

var currentData;
    $('.autosubmit input, .autosubmit select, .autosubmit textarea').live('focus', function () {
        currentData = $(this).val();
    });

    $('.autosubmit input, .autosubmit select, .autosubmit textarea').live('change', function () {
        console.log('autosubmiting...');
        var $this = $(this);
        if (!currentData || currentData != $this.val()) {
            $($this.get(0).form).ajaxSubmit(function (response, status, xhr, $form) {
                currentData = "";
            });
        }
    });

問題は、select2 では、change または focus イベントがまったく発生しないことです。select2 を削除すると、イベントは完全に発生します。

私は何を間違っていますか?

4

1 に答える 1

33

Select2 には 2 つのイベントしかなく( http://select2.github.io/select2/#eventsopen ) 、それらにのみリスナーを追加できます。for要素の代わりに eventを使用できます。メソッドは廃止されているため、使用しないでください。代わりに使用してください。changeopenfocus<select>live()on()

var currentData;
$(".autosubmit select").on("open", function() {
    currentData = $(this).val();
});
$(".autosubmit input").on("focus", function() {
    currentData = $(this).val();
});
$(".autosubmit input, .autosubmit select").on("change", function() {
    var $this = $(this);
    console.log('autosubmitting');
    if (!currentData || currentData != $this.val()) {
        $($this.get(0).form).ajaxSubmit(function (response, status, xhr, $form) {
            currentData = "";
        });
    }
});

ここにフィドルがあります

于 2013-04-17T14:14:23.270 に答える