Javascript 在Chrome中延迟提交表单
我想在用户单击链接或提交表单时,在短时间内触发并忘记一个请求。下面是我正在使用的简化代码:Javascript 在Chrome中延迟提交表单,javascript,google-chrome,Javascript,Google Chrome,我想在用户单击链接或提交表单时,在短时间内触发并忘记一个请求。下面是我正在使用的简化代码: element.addEventListener(eventType, function(event) { if (event.retriggered) { return true; } let target = event.target; let newEvent = new event.constructor(event.type, event); newEvent.re
element.addEventListener(eventType, function(event) {
if (event.retriggered) {
return true;
}
let target = event.target;
let newEvent = new event.constructor(event.type, event);
newEvent.retriggered = true;
setTimeout(() => {
target.dispatchEvent(newEvent);
}, 250);
// fire and forget the request
makeRequest();
event.preventDefault();
return false;
});
这适用于Firefox中的点击事件,也适用于Firefox中的提交事件,但不适用于Chrome。我创造了一个新的世界。在Firefox中,如果您单击该按钮,您可以看到浏览器发出GET请求,但在Chrome中不会发生这种情况。根据我的测试,原始事件和新事件在两种浏览器中看起来都一样,
dispatchEvent
返回true
。不过,Chrome不会触发实际的提交,所以我想知道Chrome是否会停止提交作为安全措施,还是我遗漏了什么?您发送的事件与您尝试复制的事件至少有一点不同。您的事件的isTrusted
属性设置为false
。也许这就是Chrome不提交表单的原因
我所知道的是,对于表单,如何使用稍有不同的代码实现所需的结果。我是基于你的小提琴中的代码,所以它现在只处理表单提交
let
form=document.getElementById('form');
表单.addEventListener('submit',函数(事件){
设置超时(()=>{
表单提交();
}, 250);
event.preventDefault();
});代码>
去
很有效,谢谢。我希望找到一个不包含特殊情况的解决方案,但Chrome的安全功能似乎可以防止编程事件触发表单提交
如果您确实不喜欢检查表单
元素。