用户立即单击按钮后,onchange输入字段后按钮onclick不会触发

eze*_*mel 10 javascript events onchange click

我有一个带有onchange事件的输入文本,该事件调用一个显示警告框的函数.我还有一个按钮,其onclick调用不同的功能.如果用户对输入文本进行了更改并立即单击该按钮,则会触发onchange事件,显示警告框,但是按钮的onclick功能中的代码不会执行.我已经读到这与事件冒泡有关,但我还没有看到任何解决方案.有解决方案吗?它甚至可能吗?

这是一个小例子:

<input type = "text" onchange = "showAlert1()">
<input type = "button" id = "al2" value = "Click Here" onclick = "showAlert2()">

<script type = "text/javascript">

function showAlert1() 
{
    alert("ONE")
}

function showAlert2() 
{
    alert ("TWO");
}

</script>
Run Code Online (Sandbox Code Playgroud)

如果对输入值进行了更改并且用户立即单击该按钮,则onclick事件处理程序showAlert2()不会触发.我想,你在输入字段中写了一些东西,单击立即按钮然后触发它

警报("ONE")和警报("TWO")......

或者只是

警报("二")

Mar*_*cel 2

据我所知,这不是冒泡的问题(这是一个问题onchange,但在这种情况下是一个转移注意力的问题)。问题是,更改字段值后单击按钮会触发blur,导致showAlert1()在按钮onclick触发之前运行。

这是一个按照您所描述的方式工作的简单示例,但您会发现它是一种不可靠的黑客行为。onclick基本上它会缓冲每个函数的执行,以便可以触发按钮。然而,如果您单击并按住按钮的时间长于通过在每个函数中设置的缓冲区,它就会崩溃setTimeout()

function showAlert1() {
    setTimeout(function(){ alert("ONE") }, 250);
}

function showAlert2() {
    setTimeout(function(){ alert("TWO") }, 250);
}
Run Code Online (Sandbox Code Playgroud)

演示:jsfiddle.net/5rTLq