使用javascript/jquery模拟"a"元素的单击

use*_*137 66 javascript jquery click hyperlink simulate

我试图模拟元素上的单击.相同的HTML如下

<a id="gift-close" href="javascript:void(0)" class="cart-mask-close p-abs" onclick="_gaq.push(['_trackEvent','voucher_new','cart',$(this).attr('rel')+'-mask_x_button-inaction']);" rel="coupon">&nbsp;</a>
Run Code Online (Sandbox Code Playgroud)

我怎样才能模拟点击它.我试过了

document.getElementById("gift-close").click();

但它没有做任何事情

And*_*ion 103

使用jQuery: $('#gift-close').trigger('click');

使用JavaScript: document.getElementById('gift-close').click();

  • 提问者没有说明这个*不起作用吗?我不明白这个誓言. (6认同)
  • `document.getElementById('gift-close').onClick();`在Chrome,Firefox或Safari中不起作用.但是,将`onClick()`更改为`click()`确实有效. (4认同)

小智 16

使用jQuery:

$('#gift-close').click();

  • 当`document.getElementById("gift-close")时,为什么会有效呢?click();`没有? (3认同)
  • @techfoobar和Alex,DOM元素都有一个`.click()`方法.http://jsfiddle.net/LKNYg/ (3认同)

小智 15

尝试使用document.createEvent这里描述的https://developer.mozilla.org/en-US/docs/Web/API/document.createEvent

模拟点击的函数代码应如下所示:

function simulateClick() {
  var evt = document.createEvent("MouseEvents");
  evt.initMouseEvent("click", true, true, window,
    0, 0, 0, 0, 0, false, false, false, false, 0, null);
  var a = document.getElementById("gift-close"); 
  a.dispatchEvent(evt);      
}
Run Code Online (Sandbox Code Playgroud)


rav*_*o10 9

下面的代码片段!

请在MDN上查看这些文档和示例,您将找到答案.这就是我要说的那样做的方法.

创建和触发事件

派遣事件(示例)

摘自'调度事件(示例)' - HTML链接(模拟点击):

function simulateClick() {

  var evt = document.createEvent("MouseEvents");

  evt.initMouseEvent("click", true, true, window,
    0, 0, 0, 0, 0, false, false, false, false, 0, null);

  var cb = document.getElementById("checkbox"); 
  var canceled = !cb.dispatchEvent(evt);

  if(canceled) {
    // A handler called preventDefault
    alert("canceled");
  } else {
    // None of the handlers called preventDefault
    alert("not canceled");
  }
}
Run Code Online (Sandbox Code Playgroud)

我就是这样做的(2017 ..):

只需使用MouseEvent.

function simulateClick() {

    var evt = new MouseEvent("click");

    var cb = document.getElementById("checkbox");
    var canceled = !cb.dispatchEvent(evt);

    if (canceled) {
        // A handler called preventDefault
        console.log("canceled");
    } else {
        // None of the handlers called preventDefault
        console.log("not canceled");
    }
}
Run Code Online (Sandbox Code Playgroud)

document.getElementById("button").onclick = evt => {
    
    simulateClick()
}

function simulateClick() {

    var evt = new MouseEvent("click");

    var cb = document.getElementById("checkbox");
    var canceled = !cb.dispatchEvent(evt);

    if (canceled) {
        // A handler called preventDefault
        console.log("canceled");
    } else {
        // None of the handlers called preventDefault
        console.log("not canceled");
    }
}
Run Code Online (Sandbox Code Playgroud)
<input type="checkbox" id="checkbox">
<br>
<br>
<button id="button">Check it out, or not</button>
Run Code Online (Sandbox Code Playgroud)


nnn*_*nnn 7

你已经尝试过的代码:

document.getElementById("gift-close").click();
Run Code Online (Sandbox Code Playgroud)

...只要元素在运行时实际存在于DOM中,就应该工作.一些可能的方法来确保包括:

  1. onload窗口的处理程序运行代码.http://jsfiddle.net/LKNYg/
  2. 如果您正在使用jQuery,请从文档就绪处理程序运行您的代码.http://jsfiddle.net/LKNYg/1/
  3. 将代码放在源html中元素之后的脚本块中.

所以:

$(document).ready(function() {
    document.getElementById("gift-close").click();
    // OR
    $("#gift-close")[0].click();
});
Run Code Online (Sandbox Code Playgroud)