Javascript 在preventDefault()之后触发事件不会';I don’我没有按预期工作
单击按钮时,发送头部请求,当我收到200个响应时,再次触发单击事件,但这次使用fileExist选项。监听器再次被调用(我检查了这个),但什么也没发生,就像e.preventDefault()仍然可以工作一样。有什么想法吗 解决方案 trigger()方法将触发jQuery事件,但不会触发浏览器的默认行为,在我的例子中,浏览器是重定向到另一个页面。此代码适用于:Javascript 在preventDefault()之后触发事件不会';I don’我没有按预期工作,javascript,jquery,Javascript,Jquery,单击按钮时,发送头部请求,当我收到200个响应时,再次触发单击事件,但这次使用fileExist选项。监听器再次被调用(我检查了这个),但什么也没发生,就像e.preventDefault()仍然可以工作一样。有什么想法吗 解决方案 trigger()方法将触发jQuery事件,但不会触发浏览器的默认行为,在我的例子中,浏览器是重定向到另一个页面。此代码适用于: $(document).on('click', '[data-toggle="if-exist"]', function (e, op
$(document).on('click', '[data-toggle="if-exist"]', function (e, options) {
options = options || {};
if (options.fileExist) {
return true;
}
var target = e.currentTarget;
var fileId = $(this).data('file');
e.preventDefault();
$.ajax({
url: Routing.generate('checkFile', {file: fileId }),
type: 'HEAD',
statusCode: {
404: function () {
alert('File does not exist');
},
200: function () {
$(target).trigger('click', { 'fileExist': true });
}
}
});
});
使用e.stopImmediatePropagation();要停止对ajax的多次调用,请使用e.stopImmediatePropagation();停止对ajax的多次调用。与其重新触发事件,不如将anon函数替换为声明的函数,然后重新调用它,这样可能会缓解preventDefault的问题?我不明白您在这里的意思。。。在200个响应之后,我只需要单击链接的默认行为。我已经更新了代码段,也许它现在更可读了-如果使用fileExist选项触发匿名函数,它将不会执行任何操作。与其重新触发事件,不如将anon函数替换为声明的函数,然后重新调用它,有可能缓解违约问题?我不明白你在这里的意思。。。在200个响应之后,我只需要单击链接的默认行为。我已经更新了代码段,也许现在它更可读了-如果用fileExist选项触发匿名函数,它就不会做任何事情。是的,但这不是我想要实现的。我没有遇到多个ajax调用的问题;)是的,但这不是我想要的。我没有遇到多个ajax调用的问题;)
$(document).on('click', '[data-toggle="if-exist"]', function (e) {
var target = this;
var fileId = $(this).data('file');
e.preventDefault();
$.ajax({
url: Routing.generate('checkFile', { file: fileId }),
type: 'HEAD',
statusCode: {
404: function () {
alert('File does not exist');
},
200: function () {
var event = document.createEvent('MouseEvents');
event.initEvent('click', false, false);
target.dispatchEvent(event);
}
}
});
});