在onchange之后,onclick事件不会被触发

时间:2012-12-17 06:39:37

标签: javascript html dom

重新创建此问题的步骤:

  1. 在文本框中输入内容
  2. 点击后立即点击按钮。
  3. 我发现只触发了onchange事件。
  4. 代码:

    <div>
        <input type="text" onchange="console.log('onchange');$('#message').css('display','none');" >
        <div id="message">
            Validating
        </div>
        <br>
        <input type="button" onclick="console.log('onclick');" value="click me">
    </div>
    

    DEMO

4 个答案:

答案 0 :(得分:5)

这是因为您正在更改布局,这会更改按钮位置并且不会调用按钮鼠标事件。 见演示:

<强> JS Bin

如果你想隐藏div,通过保留它占用的空间,使用:

$('#message').css('visibility','hidden');

<强> New Demo with visibility hidden

答案 1 :(得分:2)

对于onclick,由于按钮的位置变化,有必要发生mouse-downmouse-up事件,而不是onclick

以下是完整事件的Demo

答案 2 :(得分:0)

你正在寻找keydown / press / up ...

当用户按下某个键(在键盘上)时会发生onkeydown事件....

<div>
    <input type="text" onkeydown="console.log('onchange');$('#message').css('display','none');" >
    <div id="message">
        Validating
    </div>
    <br>
    <input type="button" onclick="console.log('onclick');" value="click me">
</div>​

这里是小提琴

http://jsfiddle.net/zQLFt/1/

答案 3 :(得分:0)

click事件是mousedown和mouseup两个事件的组合。你可以改用mousedown。

<div>
    <input type="text" onchange="console.log('onchange');$('#message').css('display','none');" >
    <div id="message">
        Validating
    </div>
    <br>
    <input type="button" onmousedown="console.log('onclick');" value="click me">
</div>