我有一个文本区域或输入,我更改文本,然后单击一个链接或按钮(不关闭输入),仅触发更改事件,而不触发单击事件。我希望他们都开火:
Enter some text and then click the link. We want f1 and f2 to appear !
<br />
<input onchange="f1();" value="input text" />
<br />
<a href="" onclick="f2();">click me</a>
function f1() {
alert("f1");
return true;
}
function f2() {
alert("f2");
return true;
}
http://jsfiddle.net/paull3876/vrcfherp/3/
我已经像上面那样用 jquery 和普通 js 试过了,我试过函数内部的 setTimeouts,我试过 input 和 textarea,但无论我做什么,只有 f1 触发。
更新 1
所以我们已经确定警报会终止任何后续事件 - 很好。 Fiddle
现在的挑战是,如何将这些事件堆叠在一个对象中,以便每个事件都可以触发警报(或确认,或...)而不阻止任何 future 事件。我只是在尝试不同的想法。更多内容……
更新 2
我写了一些代码来堆叠函数,然后在最后执行它们。它不漂亮(它应该被包装在一个类中)但它有效:
最佳答案
此行为是由于警报的阻止模式。
浏览器会依次触发事件。在这种情况下,优先级必须是
- onChange 事件
<input>
<a>
的 onClick 事件
但是当它第一次执行 onChange of input 时,它遇到了 alert
这会阻止其余的事情,因此不会触发 anchor 标记的 onClick 事件。
检查 this如果您从警报更改为 console.log
关于Javascript Change 和 Click 事件不会同时触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33442180/