0

我有一个名为 applyToDetailRows 的函数,我在加载时调用它,以及当我的页面的输入部分通过 ajax 重新绘制时调用。此函数将一堆事件附加到绘制的输入字段。字段上的事件之一是模糊,它触发 ajax 调用以获取学生信息。问题是每次页面加载每个字段时都会触发 blur ajax 触发器,而不是在 blur 上触发。只有当函数在 applyToDetailRows 中定义时才会发生这种情况。如果我将它从 applyToDetailRows 中拉出来,它就可以正常工作。

需要注意的一件事是,我也以类似的方式在 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 回答