之前触发 onchange 时未触发 onclick 事件

2023-12-14

我这里有一个有趣的问题。

我有一个文本区域,其中链接了一个 onchange 事件。 然后我有一个链接到 onclick 事件的按钮。

当在文本区域上触发 onchange 事件时,将处理放入文本区域的文本。当我单击文本区域之外的内容时,通常会发生这种情况。

我所做的如下:

  1. 我在文本区域中输入了文本。
  2. 输入后,我单击按钮以触发按钮上的 onclick 事件
  3. 什么也没发生,但是当我单击按钮时,文本区域上的 onchange 事件被触发,但按钮本身的 onclick 事件没有被触发。

为什么?我预计 onchange 和 onclick 都会被触发。有什么我需要做的,这样按钮上的点击就不会“丢失”。我意识到我必须单击两次,因为第一次单击会导致文本区域上的 onchange,然后第二次单击会触发按钮上的 onclick。

下面的代码显示了一个示例,只需尝试下面的代码即可。输入文本,然后直接单击该按钮。只有“textarea”弹出窗口会出现。

<textarea onchange="processText();" name="mytext"></textarea>
<button onclick="processButton();">Hello</button>
<script language="Javascript">
  function processText()
  {
    alert( 'textarea');
  }

  function processButton()
  {
    alert( 'button');
  }
</script>

您需要重新检查您的假设。在你的例子中,alert()中断程序流程,中断处理onclick。这段代码(jsfiddle在这里)表明onchange不干扰onclick默认情况下:

<textarea onchange="processText();" name="mytext"></textarea>
<button onclick="processButton();">Hello</button>
<div id="clicked"></div>
<div id="changed"></div>
<script language="Javascript">
  function processText()
  {
    document.getElementById('changed').innerHTML = "onchange fired";;
  }

  function processButton()
  {
    document.getElementById('clicked').innerHTML = "onclick fired";
  }
</script>​

我也遇到了类似的问题,但实际原因是onclick未处理的事件是元素被单击,由于以下原因向下滚动onchange处理程序。当释放鼠标按钮时,该元素没有收到mouseup事件并且“点击”被中断。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

之前触发 onchange 时未触发 onclick 事件 的相关文章

随机推荐