我有这段代码,它启用输入,聚焦它,然后在您单击或按 Enter 时触发 ajax 请求。
$("body").on('click', '.input', function(){
id = $(this).attr('id');
$("#inp" + id).prop('disabled', false).focus();
$("#imp" + id).on('blur keyup',function(e) {
if (e.type === 'blur' || e.keyCode === 13) {
$.ajax({ url : 'file.php?var=' + var + '&nextvar=' + nextvar,
success: function(response) {
console.log (response);
}
})
$("#imp" + id).prop('disabled', true);
}
});
})
它似乎工作正常,除了按 Enter 会导致它多次触发 ajax 之外。
谁能告诉我为什么吗?
谢谢
最佳答案
只需添加一个简单的检查是否完成即可。然后在您准备好进行另一次点击检查时刷新它
var done = false;
function ajaxCall() {
if(!done) {
$.ajax({ url : 'file.php?var=' + var + '&nextvar=' + nextvar,
success: function(response) {
console.log (response);
done = true;
}
});
}
$("#imp" + id).prop('disabled', true);
}
$(document).ready(function() {
$("body").on('click', '.input', function(){
id = $(this).attr('id');
$("#inp" + id).prop('disabled', false).focus();
});
$("#imp" + id).on('blur',function(e) { ajaxCall() });
$("#imp" + id).on('keyup',function(e) { if(e.keyCode === 13) ajaxCall() });
});
它仅运行一次(注意done = false
),如果您想重置它,请再次将全局“done”变量设置为 false。
关于Jquery - 模糊和 keyup 多次触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52554370/