【问题标题】:How to fires onClick event before onChange (even if the value has changed)?如何在 onChange 之前触发 onClick 事件(即使值已更改)?
【发布时间】:2015-03-25 11:18:35
【问题描述】:

大家好,对不起我的英语。

按照这个jdfiddle,我有一个我不明白的问题。

首先我更改输入的值,然后单击按钮,我希望看到的是“单击”,但我看到“更改”意味着 onclickonchange 之后被调用。

<input type="text" onChange="alert('change')" />
<button type="button" onClick="alert('click');">Click!</button>

我在post 上发现这是因为 chrome 在onclick 事件之前触发了onchange 事件。但是我真的没有和这篇文章一样的需求,因为我的事件没有在同一个标​​签中声明。其次,如果我点击按钮,我只想执行onclick 函数,而不是onclick 然后onchange(此方法包括使用onMouseDown)。

你有什么好的方法吗?

【问题讨论】:

  • 在您的情况下,onchange 事件肯定会在 onclick 事件之前被调用,因为 Change 事件被执行,因为当您单击按钮时焦点将超出文本框。
  • 这是按预期工作的,当您按下按钮时,您将注意力集中在更改的元素上,该事件将首先触发。据我了解您的问题,您应该删除 onchagen 事件??
  • @Henrik 如果我想将代码保留在 onchange 事件中怎么办?
  • 你为什么要这样做? - onChange 检测字段何时不再具有焦点,你真的不应该依赖它。最好寻找 OnKeyUp 或类似事件..

标签: javascript onclick onchange


【解决方案1】:

好的,我可以看到你真的不想要这个。 你可以先让on change函数运行,然后再看什么有焦点,如果是那个按钮,你就知道它被点击了,这就是失去焦点的原因。

你不能在 change 函数运行时检查这个,因为此时 body 仍然有焦点..

<head>
  <script language="javascript">
  function focussed()
  {
    var triggerElement = document.activeElement
    alert(triggerElement)
    console.info(triggerElement)
  }

  function change()
  {
    alert("change")
    setTimeout(focussed, 1)
    return true
  }
  </script>

</head>
<body>
    <input type="text" onChange="alert('change')" />
    <button type="button" onClick="alert('click');">Click!</button>
</body>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 2022-11-24
    • 2013-08-22
    相关资源
    最近更新 更多