我在表单上有一个提交事件处理程序(用于捕获提交表单的人,有时我需要通过dispatchEvent手动触发(由用户点击提交按钮以外的其他内容触发)。
我不希望它实际提交表单,但是一旦dispatchEvent被解雇,我似乎无法取消它?
myForm.addEventListener('submit', function(e) {
e.preventDefault();
console.log(e.defaultPrevented); // false
});
myForm.dispatchEvent(new Event('submit', {'detail': 'mydetail'}));
在Chrome中,这仍会输出false
,但表单未提交(所需行为)。事实上,即使我删除了preventDefault()行,它仍然没有提交?
但是,Firefox是一个不同的故事,并且总是提交表单。
我该如何更改?
答案 0 :(得分:11)
您必须使用 cancelable 属性将事件明确编码为TRUE,默认情况下,不会处理此事件。
myForm.dispatchEvent(new Event('submit', {'detail': 'mydetail', cancelable: true}))