考虑我有以下HTML:
<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
将使用myForm
触发e.target.form.submit()
。 但是,这不会触发附加到文档的submit
事件。 我的问题是:
如何模拟/触发/等。一个
submit
事件,它实际上使用我在上面描述的第三种方法(在submit
上为{document
触发了keyup
当前正在监听的text input
事件。 1}})。
P.S。我无法获得代码片段,因为它在stackoverflow中出错,所以jsfiddle is here。
答案 0 :(得分:1)
我认为这是因为您在form
上触发了该事件,而没有将其冒泡到document
。我很遗憾地无法找到关于它的文档的任何链接(因为它发生的原因)。如果有人能够提供这样的链接,我也有兴趣阅读它。
为了解决这个问题,我创建了一个submit
Event
实际起泡,也是由document
捕获的:
document.addEventListener('submit', function(e) {
console.log(e, 'documentEventListener');
});
document.getElementById('myForm').addEventListener('submit', function(e){
console.log(e, 'myFormEventListener');
})
document.getElementById('myInput').addEventListener('keyup', function(e) {
var event = new Event("submit", { bubbles: true });
this.form.dispatchEvent(event);
});
答案 1 :(得分:0)
问题是&#34; myInput&#34;输入字段已经在表单标记之外。使用外部输入提交表单是为了获取表单并使用.submit()方法。
document.addEventListener('submit', function(e) {
console.log(e, 'addEventListener');
});
document.getElementById('myInput').addEventListener('keyup', function(e) {
// console.log(e.target.form); <-- what is this for??
document.getElementById("myForm").submit();
});
答案 2 :(得分:0)
你为什么需要这个?
document.addEventListener('submit', function(e) {
console.log(e, 'addEventListener');
});
只需将输入放在表单中,这样他们就可以提交了。