it-swarm.com.de

Simulieren eines Klicks in jQuery / JavaScript auf einen Link

Ich möchte einen Klick auf einen Link auf einer Seite mit JavaScript simulieren. Wenn dieser Link eine Funktion hat, die an sein 'onclick'-Ereignis gebunden ist (von einem anderen JS, über das ich keine Kontrolle habe), muss diese Funktion aufgerufen werden, da sich der Link sonst normal verhalten und eine neue Seite öffnen sollte.

Ich bin mir nicht sicher, ob es ausreichen würde, nur den Wert des 'onclick'-Handlers zu überprüfen. Ich möchte dies so bauen, dass es auf jedem Link-Element funktioniert.

Ich habe keine Kontrolle darüber, welche Funktion mit welcher JS-Bibliothek (nicht unbedingt mit jQuery) oder einfach mit JavaScript an das onclick-Ereignis des Links gebunden werden kann.

BEARBEITEN: Mit Hilfe der folgenden Antworten können Sie nach Ereignishandlern suchen, die mit jQuery oder dem Attribut onclick angehängt wurden. Wie überprüfe ich, ob Event-Handler mit addEventListener/einer anderen JS-Bibliothek so angehängt wurden, dass sie narrensicher sind?

52
ankit

Mit der Funktion Klick können Sie das Klickereignis für das ausgewählte Element auslösen.

Beispiel:

$( 'selector for your link' ).click ();

Weitere Informationen zu verschiedenen Selektoren finden Sie in jQueries Dokumentation .

BEARBEITEN: wie die Kommentatoren unten gesagt haben; Dies funktioniert nur bei Ereignissen, die mit jQuery, inline oder im Stil von "element.onclick" angehängt wurden. Es funktioniert nicht mit addEventListener und folgt nicht dem Link, wenn keine Ereignishandler definiert sind. Sie könnten dies mit so etwas lösen:

var linkEl = $( 'link selector' );
if ( linkEl.attr ( 'onclick' ) === undefined ) {
    document.location = linkEl.attr ( 'href' );
} else {
    linkEl.click ();
}

Keine Ahnung von addEventListener.

47
Jan Hančič

Warum nicht einfach das gute alte Javascript?

$('#element')[0].click()

40
frankies

Gerade

$("#your_item").trigger("click");

mit .trigger () können Sie viele Arten von Ereignissen simulieren, indem Sie es einfach als Parameter übergeben.

30
tanathos

Einfach! Verwenden Sie einfach die Funktion klicken von jQuery:

$("#theElement").click();
8
Robert Grant

Versuche dies

function submitRequest(buttonId) {
    if (document.getElementById(buttonId) == null
            || document.getElementById(buttonId) == undefined) {
        return;
    }
    if (document.getElementById(buttonId).dispatchEvent) {
        var e = document.createEvent("MouseEvents");
        e.initEvent("click", true, true);
        document.getElementById(buttonId).dispatchEvent(e);
    } else {
        document.getElementById(buttonId).click();
    }
}

und du kannst es gerne benutzen

submitRequest("target-element-id");
7
Yashpal Singla

Sehen Sie sich zunächst diese Frage an, um festzustellen, ob einem Link ein jQuery-Handler zugewiesen ist.

Nächste Verwendung:

$("a").attr("onclick")

um zu sehen, ob ein Javascript-Ereignis zugewiesen ist.

Wenn eine der oben genannten Aussagen zutrifft, rufen Sie die click-Methode auf. Wenn nicht, erhalten Sie den Link:

$("a").attr("href")

und folge ihm.

Ich fürchte, ich weiß nicht, was ich tun soll, wenn mit addEventListener ein Ereignishandler hinzugefügt wird. Wenn Sie für die vollständige Seitenquelle verantwortlich sind, verwenden Sie nur jQuery-Ereignishandler.

1
kgiannakakis

All dies kann nicht hilfreich sein, wenn Sie die Schaltfläche Rails= Remote Form) verwenden, um das Klicken zu simulieren. Ich habe versucht, die Nice-Ereignissimulation vom Prototyp hier zu portieren: meine Snippets es und es funktioniert bei mir.

0
sergeych