82

我正在尝试模拟对元素的单击。相同的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>

我怎样才能模拟点击它。我努力了

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

但它什么也没做

4

8 回答 8

129

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

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

于 2013-07-10T11:06:39.590 回答
21

使用 jQuery:

$('#gift-close').click();
于 2013-07-10T11:06:08.753 回答
16

尝试使用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);      
}
于 2013-07-10T11:34:14.393 回答
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");
  }
}

我就是这样做的(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");
    }
}

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");
    }
}
<input type="checkbox" id="checkbox">
<br>
<br>
<button id="button">Check it out, or not</button>

于 2017-10-23T00:02:50.677 回答
8

您已经尝试过的代码:

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

...只要元素在您运行时实际存在于 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();
});
于 2013-07-10T11:15:02.733 回答
2

使用此代码单击:

$("#gift-close").click();
于 2013-07-10T11:07:55.480 回答
-1

尝试在click()方法中添加一个函数。

$('#gift-close').click(function(){
  //do something here
});

它通过在 click() 方法中分配的函数对我有用,而不是保持为空。

于 2019-01-14T20:57:21.933 回答
-3

在这里,试试这个:

$('#gift-close').on('click', function () {
    _gaq.push(['_trackEvent','voucher_new','cart',$(this).attr('rel')+'-mask_x_button-inaction']);
});
于 2013-07-10T11:16:34.147 回答