webentwicklung-frage-antwort-db.com.de

Simulieren Sie mit Javascript/jquery einen Klick auf ein Element

Ich versuche einen Klick auf ein Element zu simulieren. HTML für das selbe ist wie folgt

<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>

Wie kann ich einen Klick simulieren? Ich habe versucht

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

Aber es tut nichts

53
user2373137

JQuery verwenden: $('#gift-close').trigger('click');

Verwendung von JavaScript: document.getElementById('gift-close').click();

86
André Dion

Verwenden Sie den hier beschriebenen document.createEventhttps://developer.mozilla.org/en-US/docs/Web/API/document.createEvent

Der Code für die Funktion, die Klick simuliert, sollte in etwa wie folgt aussehen:

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);      
}
14
ihor marusyk

JQuery verwenden:

$ ('# gift-close'). click ();
13
Alex Guerra

Code-Ausschnitt darunter!

Bitte schauen Sie sich diese Dokumentationen und Beispiele unter MDN an, und Sie finden Ihre Antwort. Das ist der richtige Weg, würde ich sagen.

Ereignisse erstellen und auslösen

Versandereignis (Beispiel)

Entnommen aus dem 'Dispatch Event (Beispiel)' - HTML-Link (Klick simulieren):

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");
  }
}

So würde ich es machen (2017 ..):

Verwenden Sie einfach 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>

7
ravo10

Der Code, den Sie bereits ausprobiert haben:

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

... sollte funktionieren, solange das Element zum Zeitpunkt, zu dem Sie es ausführen, tatsächlich im DOM vorhanden ist. Einige Möglichkeiten, um dies sicherzustellen, umfassen:

  1. Führen Sie Ihren Code über einen onload-Handler für das Fenster aus. http://jsfiddle.net/LKNYg/
  2. Führen Sie Ihren Code über einen Document Ready-Handler aus, wenn Sie jQuery verwenden. http://jsfiddle.net/LKNYg/1/
  3. Fügen Sie den Code in einen Skriptblock ein, der after das Element in der Quell-HTML ist.

So:

$(document).ready(function() {
    document.getElementById("gift-close").click();
    // OR
    $("#gift-close")[0].click();
});
6
nnnnnn

Verwenden Sie diesen Code, um zu klicken:

$("#gift-close").click();
2
Farid Imranov

Versuchen Sie, eine Funktion innerhalb der click()-Methode hinzuzufügen. 

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

Es funktionierte für mich mit einer Funktion, die innerhalb der click () -Methode zugewiesen wurde, anstatt sie leer zu lassen.

0
Neo