2011-06-16 110 views
10

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

这里是一个小例子:

<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> 

如果做出改变来输入值和用户立即点击按钮的onclick事件处理程序showAlert2()不火。 我想,你写的东西输入字段中,单击按钮立即和它激发

警报(“1”)和Alert(“二”)...

或仅

警报(“二”)

+0

试图使用keyUp或代替的keyDown的onChange的? – Max 2011-06-16 12:44:46

+0

你不能使用事件onkeyup – Grumpy 2011-06-16 12:53:44

回答

2

至于我可以告诉它不是用鼓泡(这与onchange一个问题,但在这种情况下,一个红色的鲱鱼)的问题。问题是在更改字段值后单击该按钮会触发blur,导致showAlert1()在按钮的onclick被触发之前运行。

下面是一个按照您描述的方式工作的简单示例,但您会发现它比任何事情都更不可靠。基本上它会缓冲每个功能的执行,以便触发按钮的onclick。但是,如果单击并按住比每个功能中设置的缓冲区长的按钮(通过setTimeout()),则会发生此情况。

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

function showAlert2() { 
    setTimeout(function(){ alert("TWO") }, 250); 
} 

演示:jsfiddle.net/5rTLq

+0

好的,那是一种可能性。但是,这不是很好。 – ezebemmel 2011-06-17 10:25:55

1

这个怎么样

function showAlert1(a) { 
    alert(a.value); /* use setTimeout to delay */ 
} 

function showAlert2() { 
    alert(document.getElementById('txt').value); 
} 

测试:http://jsfiddle.net/C3jRr/2/

+0

这不是,我想要的是... – ezebemmel 2011-06-17 10:26:21

相关问题