考虑我有以下的HTML提交:JS - 模拟形式 “的形式属性” 文本输入
<form id="myForm" action="/echo/html/" method="post">
<input type="text" value="10" />
<input type="submit" value="submit" />
</form>
<input type="submit" form="myForm" value="submit" />
<input id="myInput" type="text" form="myForm" />
,并与HTML我有以下JS:
document.addEventListener('submit', function(e) {
console.log(e, 'addEventListener');
});
document.getElementById('myInput').addEventListener('keyup', function(e) {
console.log(e.target.form);
e.target.form.submit();
});
(注:此代码已被优化为在jsfiddle中工作,因此使用/echo/html/
。关于此的文档是here)
有三个部分,以上面的代码:
- 的
<form>
(id="myForm"
),其具有text input
和submit input
。 submit input
外myForm
,但使用属性form="myForm"
将提交myForm
内的数据。text input
当注册一个keyup
时,将通过使用e.target.form.submit()
激发myForm
。 但是,这不会触发附加到文档的submit
事件。
我的问题是:
如何模拟/触发器/等。一个
submit
事件,它实际上使用我上面描述的第三种方法(在keyup
上为text input
)发射了当前正被document
收听的submit
事件。
P.S.我无法得到一个片段,因为它在计算器中出错,所以jsfiddle is here。
有趣!以及这工作,并做我需要它做的事情。奇怪的'.submit()'(也许)没有正确冒泡到'document'。 – 4lackof
我认为这里的解释是,编程式触发的事件不会冒泡(与鼠标事件不同),但我未能找到相关参考。 – eithed
有道理。如果'.submit()'带了一个'bubble'参数,就像'new Event'一样,这将很酷。我猜这样的:'this.form.submit({bubbles:true});'但你的方式工作(只是意识到你甚至可以像这样行:'this.form.dispatchEvent(new Event(“submit “,{bubbles:true}));' – 4lackof