Ich habe einen Timer in meinem JavaScript, der das Klicken auf einen Link emulieren muss, um nach Ablauf der Zeit zu einer anderen Seite zu gelangen. Dazu benutze ich die click()
Funktion von jQuery . Ich habe $().trigger()
und window.location
auch verwendet, und ich kann es mit allen drei wie beabsichtigt funktionieren lassen.
Ich habe ein seltsames Verhalten beobachtet click()
und versuche zu verstehen, was passiert und warum.
Ich verwende Firefox für alles, was ich in dieser Frage beschreibe, aber ich bin auch daran interessiert, was andere Browser damit machen werden.
Wenn ich keinen Ereignishandler verwendet $('a').bind('click',fn)
oder $('a').click(fn)
festgelegt habe, $('a').click()
scheint der Aufruf überhaupt nichts zu bewirken. Der Standardhandler des Browsers für dieses Ereignis wird nicht aufgerufen, da der Browser die neue Seite nicht lädt.
Wenn ich jedoch zuerst einen Ereignishandler festlege, funktioniert er wie erwartet, auch wenn der Ereignishandler nichts tut.
$('a').click(function(){return true;}).click();
Dadurch wird die neue Seite geladen, als hätte ich selbst auf das a geklickt.
Meine Frage ist also zweifach: Ist das ein seltsames Verhalten, weil ich irgendwo etwas falsch mache? und warum macht das Aufrufen click()
nichts mit dem Standardverhalten, wenn ich keinen eigenen Handler erstellt habe?
BEARBEITEN:
Wie Hoffman feststellte, als er versuchte, meine Ergebnisse zu duplizieren, passiert das oben beschriebene Ergebnis nicht wirklich. Ich bin mir nicht sicher, was die Ereignisse verursacht hat, die ich gestern beobachtet habe, aber ich bin mir heute sicher, dass es nicht das war, was ich in der Frage beschrieben habe.
Die Antwort lautet also, dass Sie keine Klicks im Browser "fälschen" können und dass jQuery lediglich Ihren Event-Handler aufruft. Sie können immer noch verwenden window.location
, um die Seite zu wechseln, und das funktioniert gut für mich.