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

Javascript onchange在之前触发时未触发onclick事件,javascript,onclick,onchange,Javascript,Onclick,Onchange,我这里有个有趣的问题 我有一个文本区域,链接了一个onchange事件。 然后我有一个链接到onclick事件的按钮 在textarea上触发onchange事件时,将处理放入textarea的文本。这通常发生在我单击文本区域之外的内容时 我所做的是: 我在文本区输入了一条文本 键入后,我立即单击按钮以触发按钮上的onclick事件 没有发生任何事情,但是当我单击按钮时,文本区域上的onchange事件被触发,但是按钮本身上的onclick事件没有被触发 为什么??我希望能同时触发onchang

我这里有个有趣的问题

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

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

我所做的是:

  • 我在文本区输入了一条文本
  • 键入后,我立即单击按钮以触发按钮上的onclick事件
  • 没有发生任何事情,但是当我单击按钮时,文本区域上的onchange事件被触发,但是按钮本身上的onclick事件没有被触发
  • 为什么??我希望能同时触发onchange和onclick。有什么我需要做的吗?点击按钮不会“丢失”。我意识到我必须点击两次,因为第一次点击会导致文本区域的onchange,第二次点击会触发onclick按钮

    下面的代码显示了exmaple,请尝试下面的代码。键入文本,然后直接单击该按钮。只有“文本区域”弹出窗口会出现

    <textarea onchange="processText();" name="mytext"></textarea>
    <button onclick="processButton();">Hello</button>
    <script language="Javascript">
      function processText()
      {
        alert( 'textarea');
      }
    
      function processButton()
      {
        alert( 'button');
      }
    </script>
    
    
    你好
    函数processText()
    {
    警报('textarea');
    }
    函数processButton()
    {
    警报(‘按钮’);
    }
    
    在文本区域处理模糊事件,并在按钮上单击事件

    您需要重新检查您的假设。在您的示例中,alert()中断程序流,中断onclick的处理。此代码()演示了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>​
    
    
    你好
    函数processText()
    {
    document.getElementById('changed').innerHTML=“onchange-fired”;;
    }
    函数processButton()
    {
    document.getElementById('clicked').innerHTML=“onclick-fired”;
    }
    ​
    

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

    尝试将事件侦听器添加到组件

    document.getElementsByTagName("textarea")[0].addEventListener("change", function(){
        alert( 'textarea');
    });
    
    document.getElementsByTagName("button")[0].addEventListener("click", function(){
        alert( 'button');
    });
    

    如果定义了id,那么使用getElementById()

    您需要显示一些显示问题的代码。你怎么能期望任何人不看代码就知道问题出在哪里?嗯,看起来这是一个更大的问题。这有什么帮助?现在,当我点击按钮时,onchange和onblur被触发。当我点击其他地方时,仍然会触发onchange和onblur。我想捕捉onclick事件。我的行为与onchange事件相同,导致滚动将单击的按钮从鼠标下移出-谢谢Dag。我能想到的唯一解决办法是在mouseup事件之后延迟滚动到。