wake-up-neo.net

JavaScript: Aufrufen des Click-Events eines Ankertags über Javascript

Ich habe eine Seite mit einem Anker-Tag. In meinem JavaScript setze ich das HREF-Attribut des Ankertags dynamisch basierend auf einigen if-else-Bedingungen. Jetzt möchte ich das Klickereignis des Anchor-Tags programmgesteuert aufrufen. Ich habe den folgenden Code verwendet, war aber nicht erfolgreich.

var proxyImgSrc="CostMetrics.aspx?Model=" + model +"&KeepThis=true&TB_iframe=true&height=410&width=650";

document.getElementById("proxyAnchor").href=proxyImgSrc;
document.getElementById("proxyAnchor").onclick;

Kann mir jemand sagen, wie es weitergeht? Ich habe eine jQuery Light Box-Implementierung (Thickbox) für diesen Link.

Freundlicher Hinweis. Danke im Voraus.

19
Shyju

Wenn Sie jQuery installiert haben, tun Sie dies einfach:

$('#proxyAnchor')[0].click();

Beachten Sie, dass wir das erste Element mit [0] angeben. Der jQuery-Selektor gibt eine jQuery-Instanz zurück. Beim Aufruf von click () werden nur Click-Javascript-Handler aufgerufen, nicht die Href. Das Aufrufen von click () auf dem tatsächlichen Element (zurückgegeben von [0]) folgt dem Link in einer Href usw.

Ein Beispiel zur Veranschaulichung des Unterschieds finden Sie hier: http://jsfiddle.net/8hyU9/

Warum Ihr ursprünglicher Code nicht funktioniert, liegt wahrscheinlich daran, dass Sie onclick und nicht onclick() aufrufen. Ohne die Klammern gibt JavaScript zurück, was der onclick -Eigenschaft zugewiesen ist. Versuchen Sie nicht, es auszuführen.

Probieren Sie das folgende einfache Beispiel aus, um zu sehen, was ich meine:

var f = function() { return "Hello"; };     
alert(f);
alert(f());

Die erste zeigt den eigentlichen Text der Funktion, während die zweite das Wort "Hallo" wie erwartet anzeigt.

67
samjudson

Sie sollten das click-Ereignis wie folgt aufrufen: 

document.getElementById("proxyAnchor").click();
// $('#proxyAnchor').click();

in Ihrem Fall sollten Sie jedoch die Position des Fensters auf eine Weiterleitungsseite setzen, wenn Sie dies wünschen.

11
Canavar

Ich glaube, das ist es was du willst:

var proxyImgSrc="CostMetrics.aspx?Model=" + model +"&KeepThis=true&TB_iframe=true&height=410&width=650";
$("#proxyAnchor").attr('href', proxyImgSrc).trigger("click");;
1
karim79

Für einen sofortigen Seitenwechsel können Sie auch Folgendes tun:

var proxyImgSrc= "CostMetrics.aspx?Model=" + model + "&KeepThis=true&TB_iframe=true&height=410&width=650";
window.location = proxyImgSrc;

Hier ein Beispiel von W3 Schools: http://www.w3schools.com/js/tryit.asp?filename=tryjs_location

1
Darren Torpey

Ich glaube, Sie möchten das Ereignis click aufrufen. Nicht das "onClick". Stellen Sie außerdem sicher, dass Sie die Klammern () verwenden, wenn Sie eine Methode aufrufen. Verwechseln Sie Methoden (die mit (und) enden) nicht mit Attributen und Eigenschaften, die nicht mit (und) enden.

// Using jQuery - Which you tagged...
$("#proxyAnchor").attr("href", proxyImgSrc).click();
1
Sampson

Wenn Sie nach Unterstützung für IE suchen, kann das folgende Beispiel hilfreich sein: 

angenommen, Sie haben das Blob-Dokument im Antwortobjekt: 

                 var blob = new Blob([response.responseText], { type: headers['content-type'] });
            if (navigator.msSaveOrOpenBlob) {
                //Launches the associated application for a File or Blob saving for non webkit based browser such as safari or IE
                navigator.msSaveOrOpenBlob(blob, "cvSummary.xml");
            }
            else {
                //code for webkit based browser
                var link = document.createElement('a');
                document.body.appendChild(link);
                link.style = "display: none";
                var url = window.URL.createObjectURL(blob);
                link.href = window.URL.createObjectURL(blob);
                link.download = "cvSummary.xml";
                link.dataset.downloadurl = ["text/xml", link.download, link.href].join(':');
                link.click();
                window.URL.revokeObjectURL(url);
            }