当用户单击链接或提交表单时,我希望触发并忘记请求,且延迟时间很短。这里有一个简单的代码,我使用的是:在Chrome中延迟提交表单
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;
});
这工作正常click
事件和它工作得很好submit
事件在Firefox,但无法在Chrome。我创建了一个fiddle here。在Firefox中,如果您单击该按钮,则可以看到浏览器发出GET请求,但在Chrome中不会发生这种情况。根据我的测试,两个浏览器中的原始和新事件看起来都一样,并且dispatchEvent
返回true
。尽管如此,实际提交并未在Chrome中触发,因此我想知道Chrome会停止提交作为安全措施,还是我错过了某些内容?
这样的作品,谢谢。我所期待的,不包括特殊情况下的解决方案,但它似乎是Chrome的安全功能防止触发表单提交程序的事件。 –
你可以尝试'目标[event.type]();'如果你真的不喜欢的'form'元素的检查。 – Thijs