0

私はapplyToDetailRowsと呼ばれる関数を持っています。これは、ロード時、およびページの入力セクションがajaxを介して再描画されるときに呼び出します。この関数は、描画される入力フィールドに一連のイベントをアタッチします。フィールド上のイベントの1つはblurで、これは学生情報をフェッチするためのajax呼び出しをトリガーします。問題は、blur ajaxトリガーが、blurで起動するのではなく、各フィールドのページが読み込まれるたびに起動することです。また、これは、関数がapplyToDetailRows内で定義されている場合にのみ発生します。applyToDetailRowsから引き出すと、正常に機能します。

注意すべき点の1つは、applyToDetailRowsでも同様の方法でオートコンプリートが定義されており、正常に機能することです。しかし、これではありません。

    function applyToDetailRows() {
        $(":input[data-getstudent]").each(function() {
            $(this).on('blur', function () {
                var elem = this;
                $.ajax({
                    url: $(elem).attr('data-getstudent'),
                    dataType: "json",
                    data: {
                        studentNumber: $(elem).val()
                    },
                    success: function (result) {
                    }
                });
            });
        });
    }

/* some other definitions */

//applyToDetailRows called

applyToDetailRows();
4

1 に答える 1

0

間違ってバインドしたり、複数回バインドしたりする可能性があるため、各リクエストの後に関数を再適用するのではなく、イベント委任を使用することをお勧めします。

$(document).on("blur", ":input[data-getstudent]", function(){
  /* AJAX */
});

DOMツリー内でそれよりも近いdocumentすべての要素の共通の親に置き換えることができます。input

于 2013-02-01T18:39:34.873 に答える