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的安全功能似乎可以防止编程事件触发表单提交
如果您确实不喜欢检查
表单
元素。