我有一个名为applyToDetailRows的函数,我在加载时调用它,以及当我的页面的输入部分通过ajax重新绘制时。此函数将一堆事件附加到绘制的输入字段。字段上的一个事件是模糊,它触发ajax调用以获取学生信息。问题是,每次页面加载每个字段时,模糊ajax触发器都会触发,而不是在模糊上触发。只有在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();
答案 0 :(得分:0)
您希望在每次请求后使用事件委派而不是重新应用该函数,因为您可能错误地绑定它或者不止一次。
$(document).on("blur", ":input[data-getstudent]", function(){
/* AJAX */
});
您可以将document
替换为DOM树中距离较近的所有input
元素的公共父级。