模拟点击';a';使用javascript/jquery的元素

模拟点击';a';使用javascript/jquery的元素,javascript,jquery,hyperlink,click,simulate,Javascript,Jquery,Hyperlink,Click,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>

我试图模拟在一个元素上单击。 相同的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(“礼物关闭”)。单击()

但是使用jQuery它什么都不做:

$('#gift-close').click(); $(“#礼品收尾”)。单击() 使用jQuery:
$('#礼品收尾').trigger('click')


使用JavaScript:
document.getElementById('gift-close')。单击()

使用此代码单击:

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

您已经尝试过的代码:

document.getElementById("gift-close").click();
…只要元素在运行时确实存在于DOM中,它就可以工作。确保这一点的一些可能方法包括:

  • 从窗口的
    onload
    处理程序运行代码
  • 如果使用jQuery,请从文档就绪处理程序运行代码
  • 将代码放在源html中元素后面的脚本块中
  • 因此:

    这里,试试这个:

    $('#gift-close').on('click', function () {
        _gaq.push(['_trackEvent','voucher_new','cart',$(this).attr('rel')+'-mask_x_button-inaction']);
    });
    

    尝试使用此处描述的
    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);      
    }
    

    下面是代码片段

    请在MDN上查看这些文档和示例,您将找到您的答案。我想说,这是做这件事的最佳方式

    取自“调度事件(示例)”-HTML链接(模拟单击):

    我会这样做(2017年):

    简单使用

    document.getElementById(“按钮”).onclick=evt=>{
    模拟单击()
    }
    函数模拟单击(){
    var evt=新鼠标事件(“点击”);
    var cb=document.getElementById(“复选框”);
    var canceled=!cb.dispatchEvent(evt);
    如果(取消){
    //名为preventDefault的处理程序
    控制台日志(“已取消”);
    }否则{
    //没有一个处理程序调用preventDefault
    控制台日志(“未取消”);
    }
    }
    
    


    检查它,或者不检查它
    尝试在
    click()
    方法中添加一个函数

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


    它在click()方法中分配了一个函数,而不是将其保留为空。您在哪里执行
    document.getElementById(“礼物关闭”)。click()从?如果您使用onload处理程序(或者确保
    正确),那么它将起作用。如果您真的使用jQuery,这是您首先学习的最基本的内容之一。请查看了解更多信息。我想使内联onclick处理程序可执行请不要编写
    href=“javascript:void(0)”
    。它有严重的SEO问题。请注意,用户单击和触发的编程单击的工作方式不同。当
    document.getElementById(“礼物关闭”)。click();
    没有这样做时,为什么会这样做?因为document.getElementById(“礼物关闭”)不是一个jQuery对象,而是一个DOM对象。您也可以尝试一下:$(document.getElementById)(“礼物关闭”)。click();@techfoobar和Alex,DOM元素有一个
    。click()
    方法。@nnnnnnnn-Wow!对我来说是全新的信息..从来都不知道..Tks:-)哦,是的。你说得对。那么问题是他应该在页面加载后执行click代码,即在onReady事件中;)为什么
    document.getElementById(“礼物关闭”)会起作用.click();
    没有?您必须从javascript的
    onload
    处理程序或
    $(document)运行代码。准备(function(){//write code here})
    JQUERI要使内联onclick处理程序可执行。这在我提供的两个JSFIDLE演示中都会发生。我发现的技巧(与“最佳”答案相比)是使用[0]。这导致了脚本正常工作。另外,请看这个问题,这描述了创建自定义事件的新方法。哇,太棒了!我刚刚尝试了您的解决方案来更新您的答案,它确实有效:)如果有人想尝试,请在控制台中执行此操作….var evt=document.createEvent(“MouseEvents”);evt.initMouseEvent(“单击,真,真,窗口,0,0,0,0,假,假,假,假,假,假,假,0,空);var a=$('div#answer-17569610 a.vote-up-off')。获取(0);a、 调度事件(evt);将“document.createEvent”更改为“new CustomEvent”以符合新标准。这是更好的解决方案,因为它实际上模拟了单击,这有时与简单地触发onClick事件不同。特别是如果元素正在做两件事,比如打开一个链接(在一个新窗口中?)和处理点击事件(在同一页面上做某事)。感谢Ihor.
    document.getElementById('gift-close').onClick()
    在Chrome、Firefox或Safari中不起作用。但是,将
    onClick()
    更改为
    click()
    确实有效。询问者不是明确地说这不起作用吗?我不明白上面的意思。@HugoZink,因为它确实有效。。?在投票/评论之前你试过什么吗?@AndréDion我试过了,但它在Firefox中似乎不起作用。可能是出于安全考虑。
    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");
      }
    }
    
    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");
        }
    }
    
    $('#gift-close').click(function(){
      //do something here
    });