如何在dispatchEvent上使用preventDefault()?

时间:2016-12-01 17:01:12

标签: javascript

我在表单上有一个提交事件处理程序(用于捕获提交表单的人,有时我需要通过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是一个不同的故事,并且总是提交表单。

我该如何更改?

1 个答案:

答案 0 :(得分:11)

您必须使用 cancelable 属性将事件明确编码为TRUE,默认情况下,不会处理此事件。

 myForm.dispatchEvent(new Event('submit', {'detail': 'mydetail', cancelable: true}))