当我在jQuery中使用.focusout()
函数时,当我第二次触发事件时,它似乎会触发两次,这是我的代码示例:
$(document).ready(function() {
var baseUrl = "http://annuityadvicecentre.dev/";
if($('html').hasClass('ver--prize-soft')) {
$('#home_telephone').focusout(function () {
var softResponse = {};
var inputVal = $(this).val();
$.ajaxSetup({
headers: { 'X-CSRF-Token' : $('meta[name=_token]').attr('content') }
});
$.ajax({
type: 'POST',
url: baseUrl + "lookup",
data: {
number: inputVal,
phone_type: "mobile",
},
error: function() {
console.log('POST Error: Mobile');
},
}).done(function(data) {
// you may safely use results here
softResponse.isMobile = data;
});
$.ajax({
type: 'POST',
url: baseUrl + "lookup",
data: {
number: inputVal,
phone_type: "landline",
},
error: function() {
console.log('POST Error: Landline');
},
}).done(function(data) {
// you may safely use results here
softResponse.isLandline = data;
});
$(document).ajaxStop(function () {
console.log('All AJAX Requests Have Stopped');
});
});
}
});
对于这个凌乱的例子感到抱歉,因为我刚刚引导它,但是你可以看到我正在包装这个聚焦功能:
$('#home_telephone').focusout(function () {...
围绕我的AJAX调用,现在出于某种原因,当我在页面上测试它并且不关注#home_telephone
元素时,.ajaxStop()
函数只运行一次,这是我想要的功能,但是如果然后我单击元素并再次取消焦点,.ajaxStop()
函数运行两次。知道为什么会这样吗?感谢
答案 0 :(得分:0)
尝试在以下函数中添加e.stoppropogation():
$('#home_telephone').focusout(function (e) {
e.stopPropagation()();
//your code
});
答案 1 :(得分:0)
每次元素未聚焦时,您都会添加一个新的ajaxStop
侦听器。只需移动:
$(document).ajaxStop(function () {
console.log('All AJAX Requests Have Stopped');
});
在focusout
回调函数之外调用。