【问题标题】:Fake "click" to activate an onclick method假“点击”以激活 onclick 方法
【发布时间】:2008-12-07 12:12:29
【问题描述】:

我有一个带有 onclick 方法的元素。

我想在另一个函数中激活该方法(或:假点击此元素)。

这可能吗?

【问题讨论】:

    标签: javascript event-handling


    【解决方案1】:

    一旦你选择了一个元素,你就可以调用 click()

    document.getElementById('link').click();
    

    见:https://developer.mozilla.org/En/DOM/Element.click

    我不记得这是否适用于 IE,但它应该。我附近没有 Windows 机器。

    【讨论】:

      【解决方案2】:

      如果你使用的是 JQuery,你可以这样做:

      $('#elementid').click();
      

      【讨论】:

      • 触发下拉选择选项的html select元素onClick事件不起作用,为什么?
      • $('#elementid').trigger("click");
      • 该问题不要求 JQuery 答案。此外,原版语法几乎相同,但无疑更快。
      • 我需要一个新厨房 - 我会为此调用 jQuery。
      • 放松伙计们,问题是在 2008 年,跨浏览器的不一致行为很常见,jquery 被大量用于填补这些空白。从那时起,浏览器已经走过了漫长的道路。
      【解决方案3】:

      我可能会误解您的问题,但是,是的,这是可能的。我会这样做的方式是:

      var oElement = document.getElementById('elementId');   // get a reference to your element
      oElement.onclick = clickHandler; // assign its click function a function reference
      
      function clickHandler() {
          // this function will be called whenever the element is clicked
          // and can also be called from the context of other functions
      }
      

      现在,只要单击此元素,clickHandler 中的代码就会执行。同样,您可以通过在其他函数的上下文中调用该函数来执行相同的代码(甚至分配clickHandler 来处理由其他元素触发的事件)>

      【讨论】:

      • 如果你想在这个点击处理程序中使用“ev.target”,你可能会遇到问题......
      【解决方案4】:

      如果你使用 jQuery,你需要使用 .trigger 函数,所以它会是这样的:

      element.trigger('click');
      

      http://api.jquery.com/trigger/

      【讨论】:

        【解决方案5】:
        var clickEvent = new MouseEvent('click', {
          view: window,
          bubbles: true,
          cancelable: true
        });
        var element = document.getElementById('element-id'); 
        var cancelled = !element.dispatchEvent(clickEvent);
        if (cancelled) {
          // A handler called preventDefault.
          alert("cancelled");
        } else {
          // None of the handlers called preventDefault.
          alert("not cancelled");
        }
        

        所有主流浏览器都支持element.dispatchEvent。上面的示例基于示例simulateClick() function on MDN

        【讨论】:

        • 我在那里没有看到示例模拟Click()。为什么我们必须在此处复制内容,因为页面会更改。
        • @JosephK - 在“示例”下,单击标题为“创建和触发事件”的链接,simulateClick() 函数就在那里。
        【解决方案6】:

        使用javascript 可以触发click()focus(),如下例所示

        document.addEventListener("click", function(e) {
          console.log("Clicked On : ",e.toElement);
        },true);
        document.addEventListener('focus',function(e){
          console.log("Focused On : ",e.srcElement);
        },true);
        
        document.querySelector("#button_1").click();
        document.querySelector("#input_1").focus();
        <input type="button" value="test-button" id="button_1">
        <input type="text" value="value 1" id="input_1">
        <input type="text" value="value 2" id="input_2">

        【讨论】:

          【解决方案7】:

          这是一个完美的例子,说明您应该使用像 Prototype 或 JQuery 这样的 JavaScript 库来抽象出跨浏览器的差异。

          【讨论】:

            【解决方案8】:

            只需调用“onclick”!

            这是一个示例 html:

            <div id="c" onclick="alert('hello')">Click me!</div>
            <div onclick="document.getElementById('c').onclick()">Fake click the previous link!</div>
            

            【讨论】:

            • 他没有提到他想填充一个“事件”对象..只是他想调用该方法。另外我不确定你在说什么东西!
            • 我今天的所有阅读都指向使用 .click(),使用 .onclick() 解决了我在 win7 上的 safari 5.1.7 无法识别 .click() 的问题。 iPad IOS6 上的 chrome、FF、safari 都可以识别 .click()。它让我发疯了!感谢 hasen j PS $('elementid').onclick() 与其他浏览器一起使用,因此 Safari 5.1.7 无需例外。我对IE一无所知,因为它有很多问题,我无法接近这段代码来测试它。那是另一天。
            【解决方案9】:

            对于 IE,有 fireEvent() 方法。不知道这是否适用于其他浏览器。

            【讨论】:

              【解决方案10】:

              我没有用过 jQuery,但是 IIRC,提到的第一个方法不会触发 onclick 处理程序。

              如果您不使用事件详细信息,我会直接调用关联的 onclick 方法。

              【讨论】:

                【解决方案11】:

                您也可以尝试获取元素的 onclick 属性,然后传递给 eval。尽管对评估有很大的禁忌,但这应该可以工作。我在下面放了一个示例

                eval(document.getElementById('elementId').getAttribute('onclick'));
                

                【讨论】:

                • 这很好用,除非 onclick 脚本引用了未导入脚本命名空间的内容。
                猜你喜欢
                • 2010-09-25
                • 2015-07-10
                • 2014-05-08
                • 1970-01-01
                • 1970-01-01
                • 2018-10-28
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多