Unterschied zwischen .click () und tatsächlich auf eine Schaltfläche klicken? (javascript / jQuery)
Ich versuche, herauszufinden, dieses seltsame Problem habe ich, und die Ursache ist der Unterschied zwischen einer live klicken und auslösen .click()
.
Werde ich nicht in die details des Problems, aber im Grunde, wenn Sie klicken Sie auf die input-Taste funktioniert es einwandfrei (hat eine onclick
Ereignis). Aber wenn ich Anruf .click()
von woanders (statt körperlich Klick auf die Schaltfläche) funktioniert es nicht richtig.
Meine Frage ist - gibt es einen Weg, um wirklich replizieren die tatsächliche klicken Sie auf eine Schaltfläche?
BEARBEITEN
Das problem: ich bin ein neues Fenster öffnen (aspx-Seite) lädt, die ein inline-PDF-Datei. Wenn ich tatsächlich auf den link klicken, öffnet sich das Fenster in Ordnung und die PDF-Datei lädt. Wenn ich .click()
öffnet sich das Fenster und ich werde aufgefordert zum herunterladen der PDF-Datei. Ich bin durch die Adobe Reader-Einstellungen, browser-Einstellungen und registry-Einstellungen über die Aufforderung - ich verstehe, dass diese Faktoren auf das große Bild, aber jetzt bin ich besorgt darüber, warum das Verhalten zwischen einem Mausklick und .klicken Sie auf() sind dabei etwas unterschiedlich.
InformationsquelleAutor der Frage Goose | 2012-06-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich diese Funktion verwenden, um wirklich imitieren Mausklick:
InformationsquelleAutor der Antwort Dvir Azulay
Vor dem Lesen der folgenden, die beschreibt, wie, dieses problem zu umgehen, lassen Sie mich die Antwort mehr voll, weshalb Sie das problem zu beginnen mit:
Modernen Browsern verschiedene Aktionen für links basierend auf Dinge wie die Maus-Schaltfläche, die Sie geklickt haben, mit, ob Sie statt Shift und Strg und Altund so weiter. Als ein Beispiel, in Chrome, wenn Sie mit der mittleren Maustaste einen link statt Links-Klick, der browser öffnet sich automatisch das Fenster in einem neuen tab.
Wenn Sie
.click()
jQuery, Annahmen zu machen über die "Art und Weise", in der Sie geklickt haben, und Sie bekommen standardmäßig Verhalten - die in Ihrem Fall, ist nicht das richtige Verhalten. Sie müssen angeben, dass die "richtigen" Einstellungen an den browser in form vonMouseEvents
Einstellungen vornehmen, um das Problem zu beheben.Nun zu einer kurzen Diskussion von Möglichkeiten, um es zu beheben:
Wenn Sie mit jQuery
.click()
Ereignis keine Parameter, das ist nicht wirklich "fälscht einen Klick" auf das element in Frage. Statt, nach der jQuery-Dokumentation auf http://api.jquery.com/click/ :Dies bedeutet, dass, wenn Sie Feuer
$('#div1').click()
- wenn es keine eigentliche jQuery-handler für die'click'
Veranstaltung, erhalten Sie die Standard-Verarbeitung. So betrachten diese beiden Fälle:Fall 1:
In diesem ersten Szenario, das
.click()
anrufen bringt nichts, weil es keinen handler dafür. Das Ereignis auslöst, aber es gibt nichts, um es zu fangen und zu reagieren - so diea
tag, die Standard-Behandlung verwendet wird, und der Benutzer wird genommen, um/some/link/
- und da Sie noch nicht angegeben, welche Maustaste oder anderen Parameter - es ist wirklich Standard.Fall 2:
In diesem Szenario, da ein
click
- handler erstellt wurde, wenn der Benutzer auf den link klickt - derev.preventDefault()
undev.stopPropagation()
Anrufe zu stoppen die Standardbehandlungen auftreten, und der Alarm wird ausgelöst.Zu diesem Zeitpunkt, jedoch, Sie haben eine
ev
- Objekt repräsentiert dieMouseEvents
- und man konnte die Einstellungen ändern, wenn gewünscht. Zum Beispiel könnten Sie Folgendes tun:Diese Einstellungen ändern, wird die Standard-Methode der Umgang mit dem Ereignis.
Alternative, nicht-jQuery-Lösung
Können Sie auch wirklich simulieren ein button-klicken Sie durch die Anpassung des folgenden code.
(Für eine vollständige Implementierung finden Sie unter dem original post at: Wie kann ich simulieren, klicken Sie auf einen Anker-tag? - und Blick auf die ausgewählte Antwort)
Dies tatsächlich gefälschte browser zu glauben, dass Sie mit der Maus auf das Anker /Spanne /etc durch den Aufbau der Veranstaltung von Grund auf in der gleichen Weise, dass der browser die Standard-Handler tun - außer, dass Sie diese überschreiben die Einstellungen. Ich weiß nicht vorschlagen, dieser Ansatz jedoch, da es viel mehr anfällig zu brechen auf cross-browser-Anwendung, und Sie müssen, um herauszufinden, was all die Parameter anzeigen.
InformationsquelleAutor der Antwort Troy Alford
InformationsquelleAutor der Antwort Himanshu Shekhar