【问题标题】:Is it possible to trigger a link's (or any element's) click event through JavaScript?是否可以通过 JavaScript 触发链接(或任何元素)的点击事件?
【发布时间】:2008-09-27 14:54:36
【问题描述】:

我正在编写一些需要触发click 事件以获取链接的JavaScript 代码。在 Internet Explorer 中我可以做到这一点

var button = document.getElementById('myButton');
button.click();

但这在 Firefox 中不起作用,我假设任何其他浏览器。在 Firefox 中,我已经这样做了

var button = document.getElementById('myButton');
window.location = button.href;

我觉得这不是最好的方法。有没有更好的方法来触发click 事件?最好是不管元素类型或浏览器如何都能正常工作的东西。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    http://jehiah.cz/archive/firing-javascript-events-properly

    function fireEvent(element,event) {
       if (document.createEvent) {
           // dispatch for firefox + others
           var evt = document.createEvent("HTMLEvents");
           evt.initEvent(event, true, true ); // event type,bubbling,cancelable
           return !element.dispatchEvent(evt);
       } else {
           // dispatch for IE
           var evt = document.createEventObject();
           return element.fireEvent('on'+event,evt)
       }
    }
    

    【讨论】:

    • 根据经验,通常最好先检查标准功能(例如createEvent),然后再检查专有功能(例如createEventObject)。
    • 为什么要否定element.dispatchEvent()的返回值?如果事件被取消,element.dispatchEvent 和 element.fireEvent 都返回 false,否则返回 true。
    【解决方案2】:

    我不推荐它,但您可以将 HTML 元素的 onclick 属性调用为方法。

    <a id="my-link" href="#" onclick="alert('Hello world');">My link</a>
    
    document.getElementById('my-link').onclick();
    

    【讨论】:

      【解决方案3】:

      这通常是不可能的,afaik,mozilla 有 click() 方法,但仅适用于输入元素,而不是链接。

      您为什么不创建一个按钮将在 onClick 处理程序上调用的函数,并且每当您想“单击”按钮时调用该函数?

      【讨论】:

        【解决方案4】:

        Mozilla 对允许的 JS 操作/事件有更严格的政策——我在 click() 事件上也遇到了类似的问题。它在某些元素上被禁用以防止 XSS。

        重定向浏览器有什么问题?这在任何地方都有效。

        【讨论】:

          【解决方案5】:

          嘿,我不是要挖掘一个旧线程 - 但我也在寻找同样问题的答案,并找到了 jQuery 1.3x 的新功能(我遇到了 Ajax 加载内容的问题)

          我是这样实现的:

          HTML

          <a class="navlink" href="mypage.html">Online Estimate</a>
          

          加载脚本

          $(".pagelink").click(function(){
              $(".navlink[href="+$(this).attr("href")+"]").trigger('click');
              return false;
          });
          

          加载的 HTML

          <a class="pagelink" href="mypage.html">Online Estimate</a>
          

          函数是“触发事件”...
          更多细节在这里: http://docs.jquery.com/Events/trigger#eventdata

          【讨论】:

          • 这不会在 100% 的时间里完美地适用于每个元素。例如,它不会导航到 href 中的值,即使那里有东西。 Chris MacDonald 的示例将作用于每个元素并触发默认操作,例如导航到 href 以获取锚标记。
          • 确实如此。我正在使用'return false;',并绕过实际的链接元素功能,因为我正在使用 jQuery 和 Ajax 将内容加载到 DOM 中。在这种情况下,它是最少的代码和最干净的解决方案 - 但在 Dan Herbert 指出的许多其他情况下,Chris MacDonald's 将是首选。
          • jquery 答案是无关紧要的,因为问题只是带有 javascript 的标签。我对你的回答投反对票的原因。
          【解决方案6】:

          我正在拼命寻找这个,最简单的似乎可以工作!

          document.getElementById('foo').onclick();
          

          它在 chrome 7.0.5 和 8.0.6 中工作

          【讨论】:

          • 只有在 dom 元素上定义了 onclick 属性时才有效!
          • 那么你应该尝试提供一个正确的答案,而不是回答原来的问题!
          猜你喜欢
          • 2013-03-20
          • 2012-12-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-21
          • 1970-01-01
          • 2010-09-13
          相关资源
          最近更新 更多