Ich habe ein Problem mit dem Fälschen eines Ankerklicks über jQuery: Warum wird meine Thickbox beim ersten Klicken auf die Eingabeschaltfläche angezeigt, nicht jedoch beim zweiten oder dritten Mal?
Hier ist mein Code:
<input onclick="$('#thickboxId').click();" type="button" value="Click me" />
<a id="thickboxId" href="myScript.php" class="thickbox" title="">Link</a>
Es funktioniert immer, wenn ich direkt auf den Link klicke, aber nicht, wenn ich versuche, die Thickbox über die Eingabetaste zu aktivieren. Dies ist in FF. Für Chrome scheint es jedes Mal zu funktionieren. Irgendwelche Hinweise?
Antworten:
Vermeiden Sie es, Ihre jQuery-Aufrufe so einzuschleusen. Fügen Sie oben auf der Seite ein Skript-Tag ein, um eine Bindung an das
click
Ereignis herzustellen:Bearbeiten:
Wenn Sie versuchen, einen Benutzer zu simulieren, der physisch auf den Link klickt, glaube ich nicht, dass dies möglich ist. Eine Problemumgehung wäre, das
click
Ereignis der Schaltfläche zu aktualisieren , um daswindow.location
in Javascript zu ändern :Bearbeiten 2:
Nachdem ich festgestellt habe, dass Thickbox ein benutzerdefiniertes Widget für die jQuery-Benutzeroberfläche ist, habe ich die folgenden Anweisungen gefunden :
Anleitung:
Erstellen Sie ein Linkelement (
<a href>
)Geben Sie dem Link ein Klassenattribut mit dem Wert von dickbox (
class="thickbox"
)Fügen Sie im
href
Attribut des Links den folgenden Anker hinzu:#TB_inline
Fügen Sie im
href
Attribut nach dem#TB_inline
Hinzufügen der folgenden Abfragezeichenfolge zum Anker hinzu:height = 300 & width = 300 & inlineId = myOnPageContent
Ändern Sie die Werte für Höhe, Breite und Inline-ID in der Abfrage entsprechend (Inline-ID ist der ID-Wert des Elements, das den Inhalt enthält, den Sie in einer ThickBox anzeigen möchten.
Optional können Sie der Abfragezeichenfolge modal = true hinzufügen (z. B.
#TB_inline?height=155&width=300&inlineId=hiddenModalContent&modal=true
), sodass zum Schließen einer ThickBox dietb_remove()
Funktion aus der ThickBox heraus aufgerufen werden muss. Sehen Sie sich das Beispiel für versteckte modale Inhalte an, in dem Sie auf Ja oder Nein klicken müssen, um die ThickBox zu schließen.quelle
.prop()
anstattattr()
die aufgelöste URL zu erhalten.Was für mich funktioniert hat war:
quelle
focus
anstelle vonclick
:)[0]
gibt das erste Element des Arrays an - ein Selektor gibt bei seiner Ausführung 0 oder mehr Elemente zurück. Es ist bedauerlich, dass.click()
dies hier nicht direkt zu funktionieren scheint, da scheinbar andere Aufrufe auf Sammlungen von Elementen von Selektoren konsistent im gesamten Framework angewendet werden.[0]
oder.get(0)
sind gleich. Diese verwenden die DOM-Version des Elements anstelle der jQuery-Version. Die.click()
Funktion ist in diesem Fall nicht das jQuery-Klickereignis, sondern das native.Ich habe kürzlich herausgefunden, wie ein Mausklickereignis über jQuery ausgelöst wird.
quelle
Dieser Ansatz funktioniert mit Firefox, Chrome und IE. hoffe es hilft jemandem:
quelle
Obwohl dies eine sehr alte Frage ist, fand ich etwas einfacher, um diese Aufgabe zu bewältigen. Es ist ein jquery-Plugin, das vom jquery-UI-Team namens simulate entwickelt wurde. Sie können es nach jquery einfügen und dann können Sie so etwas tun
funktioniert gut in Chrome, Firefox, Oper und IE10. Sie können es von https://github.com/eduardolundgren/jquery-simulate/blob/master/jquery.simulate.js herunterladen
quelle
simulate()
ist , dass es die jQuery Ereignisse sendet sowie die Auslösung der nativen Browser Aktion. Dies ist jetzt die richtige Antwort +1Der Fragentitel lautet "Wie kann ich einen Ankerklick in jQuery simulieren?". Nun, Sie können die Methoden "trigger" oder "triggerHandler" wie folgt verwenden:
Nicht getestet, dieses eigentliche Skript, aber ich habe
trigger
et al schon einmal verwendet , und sie haben gut funktioniert.UPDATE
triggerHandler
macht eigentlich nicht das, was das OP will. Ich denke, 1421968 bietet die beste Antwort auf diese Frage.quelle
Ich würde vorschlagen, die Selenium-API zu betrachten, um zu sehen, wie sie einen Klick auf ein Element auf browserkompatible Weise auslösen:
Suchen Sie nach der
BrowserBot.prototype.triggerMouseEvent
Funktion.quelle
Ich glaube, Sie können verwenden:
Dadurch wird die Klickfunktion leicht ausgelöst, ohne dass Sie darauf klicken müssen.
quelle
Müssen Sie einen Ankerklick vortäuschen? Von der Thickbox-Site:
Wenn dies akzeptabel ist, sollte es so einfach sein, wie die Thickbox-Klasse auf die Eingabe selbst zu setzen:
Wenn nicht, würde ich empfehlen, Firebug zu verwenden und einen Haltepunkt in die onclick-Methode des Ankerelements zu setzen, um festzustellen, ob dieser nur beim ersten Klick ausgelöst wird.
Bearbeiten:
Okay, ich musste es selbst ausprobieren und für mich funktionierte Ihr Code ziemlich genau in Chrome und Firefox:
Das Fenster wird angezeigt, unabhängig davon, ob ich auf die Eingabe oder das Ankerelement klicke. Wenn der obige Code für Sie funktioniert, schlage ich vor, dass Ihr Fehler an anderer Stelle liegt und Sie versuchen, das Problem zu isolieren.
Eine andere Möglichkeit ist, dass wir verschiedene Versionen von jquery / thinbox verwenden. Ich verwende das, was ich von der Thickbox-Seite erhalten habe - jquery 1.3.2 und Thickbox 3.1.
quelle
Sie können ein Formular über jQuery oder im HTML-Seitencode mit einer Aktion erstellen, die Ihren Link nachahmt href:
<a id="anchor_link" href="somepath.php">click here</a>.
quelle
Um einen Klick auf einen Anker während der Landung auf einer Seite zu simulieren, habe ich nur jQuery verwendet, um die scrollTop-Eigenschaft in
$(document).ready.
Keine Notwendigkeit für einen komplexen Trigger zu animieren. Dies funktioniert in IE 6 und jedem anderen Browser.quelle
Wenn Sie JQuery nicht verwenden müssen, wie ich es nicht tue. Ich hatte Probleme mit der Cross-Browser-Funktion von
.click()
. Also benutze ich:quelle
In Javascript können Sie dies tun
und du kannst es gerne benutzen
quelle
Mit Jures Skript habe ich dies gemacht, um einfach so viele Elemente zu "klicken", wie Sie möchten.
Ich habe es gerade mit Google Reader für mehr als 1600 Artikel verwendet und es hat perfekt funktioniert (in Firefox)!
quelle
createEventObject
IE eher dazu dient, ein Ereignisobjekt zu erstellen, das an Handler übergeben werden soll, als ein synthetisches Ereignis auszulösen . IE'sfireEvent
sind zwar näherdispatchEvent
dran, lösen jedoch nur Listener aus - keine Standard-Browseraktionen. Im IE können Sie dieclick
Methode jedoch einfach aufrufen .JQuery('#left').triggerHandler('click');
funktioniert gut in Firefox und IE7. Ich habe es nicht in anderen Browsern getestet.Wenn Sie automatische Benutzerklicks auslösen möchten, gehen Sie wie folgt vor:
quelle
Dies funktioniert nicht im nativen Android-Browser, um auf "verstecktes Eingabe- (Datei-) Element" zu klicken:
Aber das funktioniert:
quelle
Beim Versuch, ein Klicken in Komponententests mit dem jQuery UI-Spinner zu simulieren, konnte ich keine der vorherigen Antworten zum Laufen bringen. Insbesondere habe ich versucht, den "Spin" der Auswahl des Abwärtspfeils zu simulieren. Ich habe mir die Spinner-Unit-Tests für jQuery UI angesehen und sie verwenden die folgende Methode, die für mich funktioniert hat:
quelle