Ich möchte ein <input type="file">
Klickereignis programmgesteuert auf ein Tag auslösen.
Nur das Aufrufen von click () scheint nichts zu bewirken oder öffnet zumindest keinen Dateiauswahldialog.
Ich habe mit dem Erfassen von Ereignissen mithilfe von Listenern experimentiert und das Ereignis umgeleitet, aber ich habe es nicht geschafft, das Ereignis tatsächlich so auszuführen, wie jemand darauf geklickt hat.
javascript
html
user28655
quelle
quelle
Antworten:
Sie können nicht tun , dass in allen Browsern, angeblich IE hat es erlauben, aber Mozilla und Opera nicht.
Wenn Sie eine Nachricht in GMail verfassen, wird die Funktion "Dateien anhängen" für den IE und jeden Browser, der dies unterstützt, auf eine Weise implementiert und dann für Firefox und die Browser, die dies nicht tun, auf eine andere Weise implementiert.
Ich weiß nicht, warum Sie das nicht können, aber eine Sache, die ein Sicherheitsrisiko darstellt und die Sie in keinem Browser tun dürfen, ist das programmgesteuerte Festlegen des Dateinamens für das HTML-Dateielement.
quelle
input
sichtbar ist. Das Auslösen derclick
Methode funktioniert auch in der Konsole, wenn das Element sichtbar ist.Ich habe den ganzen Tag nach einer Lösung gesucht. Und das sind die Schlussfolgerungen, die ich gezogen habe:
Hoffe das hilft! :) :)
quelle
Sie können click () in jedem Browser auslösen, aber in einigen Browsern muss das Element sichtbar und fokussiert sein. Hier ist ein jQuery-Beispiel:
Es funktioniert mit dem Verstecken vor dem,
click()
aber ich weiß nicht, ob es funktioniert, ohne die show-Methode aufzurufen. Ich habe dies noch nie in Opera versucht. Ich habe es in IE / FF / Safari / Chrome getestet und es funktioniert. Ich hoffe das wird helfen.quelle
$(...).show().focus().click().hide();
:)DAS IST MÖGLICH: Unter FF4 +, Opera ?, Chrome: aber:
inputElement.click()
sollte aus dem Kontext der Benutzeraktion aufgerufen werden! (kein Skriptausführungskontext)<input type="file" />
sollte sichtbar sein (inputElement.style.display !== 'none'
) (Sie können es mit Sichtbarkeit oder einer anderen, aber nicht "Anzeige" -Eigenschaft ausblenden)quelle
onclick
Attribut hinzufügen , anstatt mich an das Ereignis zu binden.inputElement.click()
innerhalb eines Keydown-Ereignisses (Verknüpfung zum Anhängen einer Datei) funktionierte, das Aufrufen in einem Timeout- oder Ajax-Rückruf jedoch NICHT. Upvoted.this
. : /Für diejenigen, die verstehen, dass Sie ein unsichtbares Formular über den Link legen müssen, aber zu faul zum Schreiben sind, habe ich es für Sie geschrieben. Nun, für mich, könnte aber genauso gut teilen. Kommentare sind willkommen.
HTML (irgendwo):
HTML (an einem Ort, den Sie nicht interessieren):
JavaScript:
quelle
Probieren Sie diese Lösung aus: http://code.google.com/p/upload-at-click/
quelle
Verwenden Sie einfach ein Label-Tag. Auf diese Weise können Sie die Eingabe ausblenden und sie über das zugehörige Label https://developer.mozilla.org/fr/docs/Web/HTML/Element/Label bearbeiten
quelle
Wenn die
click
Methode unter Chrome, Firefox usw. funktionieren soll, wenden Sie den folgenden Stil auf Ihre Eingabedatei an. Es wird perfekt versteckt sein, es ist wie du es tustdisplay: none;
So einfach ist das, ich habe getestet, dass es funktioniert!
quelle
height
undwidth
zu0
?Arbeitete für mich, als ich auf ein ähnliches Problem stieß, es ist ein regulärer eRube Goldberg.
quelle
Lassen Sie mich diesem alten Beitrag eine funktionierende Lösung hinzufügen, die ich verwendet habe und die wahrscheinlich in 80% oder mehr aller neuen und alten Browser funktioniert.
Die Lösung ist komplex und doch einfach. Der erste Schritt besteht darin, CSS zu verwenden und den Eingabedateityp mit "Unterelementen" zu versehen, die durchscheinen, da er eine Deckkraft von 0 hat. Der nächste Schritt besteht darin, JavaScript zu verwenden, um die Bezeichnung nach Bedarf zu aktualisieren.
Arbeitsbeispiel jsFiddle
quelle
Es klappt :
Aus Sicherheitsgründen können Sie in Firefox und Opera die Klick auf die Dateieingabe nicht auslösen, aber Sie können mit MouseEvents simulieren:
quelle
createEvent()
undinitMouseEvent()
jetzt veraltet sind.Ich weiß, dass dies alt ist, und all diese Lösungen sind Hacks um Sicherheitsvorkehrungen für Browser mit echtem Wert.
Ab heute funktioniert fileInput.click () im aktuellen Chrome (36.0.1985.125 m) und im aktuellen Firefox ESR (24.7.0), jedoch nicht im aktuellen IE (11.0.9600.17207). Das Überlagern eines Dateifelds mit der Deckkraft 0 über einer Schaltfläche funktioniert, aber ich wollte ein Linkelement als sichtbaren Auslöser, und das Unterstreichen des Schwebefluges funktioniert in keinem Browser. Es blinkt und verschwindet dann. Wahrscheinlich überlegt der Browser, ob das Hover-Styling tatsächlich zutrifft oder nicht.
Aber ich habe eine Lösung gefunden, die in all diesen Browsern funktioniert. Ich werde nicht behaupten, jede Version jedes Browsers getestet zu haben oder dass ich weiß, dass es für immer funktionieren wird, aber es scheint jetzt meine Anforderungen zu erfüllen.
Es ist ganz einfach: Positionieren Sie das Dateieingabefeld außerhalb des Bildschirms (Position: absolut; oben: -5000px), setzen Sie ein Beschriftungselement darum und lösen Sie den Klick auf die Beschriftung anstelle des Dateifelds selbst aus.
Beachten Sie, dass der Link per Skript ausgeführt werden muss, um die Klickmethode des Etiketts aufzurufen. Dies geschieht nicht automatisch, wie wenn Sie auf Text in einem Etikettenelement klicken. Anscheinend erfasst das Link-Element den Klick und schafft es nicht bis zur Beschriftung.
Beachten Sie auch, dass dies keine Möglichkeit bietet, die aktuell ausgewählte Datei anzuzeigen, da das Feld außerhalb des Bildschirms liegt. Ich wollte sofort einreichen, wenn eine Datei ausgewählt wurde, daher ist das für mich kein Problem, aber Sie benötigen einen etwas anderen Ansatz, wenn Ihre Situation anders ist.
quelle
JS Fiddle: http://jsfiddle.net/eyedean/1bw357kw/
quelle
Dieser Code funktioniert für mich. Versuchen Sie das zu tun?
quelle
Meine Lösung für Safari mit jQuery und jQuery-ui:
quelle
Hier ist eine reine JavaScript-Lösung für dieses Problem. Funktioniert gut in allen Browsern
quelle
Es gibt Möglichkeiten, Ereignisse an das Steuerelement umzuleiten, aber erwarten Sie nicht, dass Sie Ereignisse einfach selbst an das Steuerelement auslösen können, da die Browser versuchen, dies aus (guten) Sicherheitsgründen zu blockieren.
Wenn das Dateidialogfeld nur angezeigt werden soll, wenn ein Benutzer auf etwas klickt, beispielsweise weil Sie besser aussehende Schaltflächen zum Hochladen von Dateien wünschen, sollten Sie sich ansehen, was Shaun Inman sich ausgedacht hat .
Ich war in der Lage, eine Tastaturauslösung durch kreatives Verschieben des Fokus innerhalb und außerhalb der Steuerung zwischen Keydown-, Tastendruck- und Tastendruckereignissen zu erreichen. YMMV.
Mein aufrichtiger Rat ist, dies in Ruhe zu lassen, denn dies ist eine Welt voller Browser-Inkompatibilitätsschmerzen. Kleinere Browser-Updates blockieren möglicherweise auch Tricks ohne Vorwarnung, und Sie müssen Hacks möglicherweise immer wieder neu erfinden, damit sie funktionieren.
quelle
Ich habe dies vor einiger Zeit untersucht, weil ich eine benutzerdefinierte Schaltfläche erstellen wollte, die den Dateidialog öffnet und den Upload sofort startet. Ich habe gerade etwas bemerkt, das dies möglich machen könnte - Firefox scheint den Dialog zu öffnen, wenn Sie irgendwo auf den Upload klicken. Folgendes könnte es also tun:
Dies ist nur theoretisch, da ich bereits eine andere Methode verwendet habe, um das Problem zu lösen, aber es könnte funktionieren.
quelle
Ich hatte ein
<input type="button">
Tag nicht sichtbar. Ich habe das"onClick"
Ereignis an eine sichtbare Komponente eines beliebigen Typs wie ein Etikett angehängt. Dies erfolgte entweder mit den Entwicklertools von Google Chrome oder mit dem Firebug von Mozilla Firefox mit dem Rechtsklick auf den Befehl "HTML bearbeiten". Geben Sie in diesem Fall das folgende Skript oder ähnliches an:Wenn Sie JQuery haben:
wenn nicht:
Vielen Dank.
quelle
Hey, diese Lösung funktioniert. Zum Download sollten wir MSBLOB verwenden
Für AngularJS oder sogar für normales Javascript.
quelle
Dies ist jetzt in Firefox 4 möglich, mit der Einschränkung, dass es als Popup-Fenster gilt und daher immer dann blockiert wird, wenn ein Popup-Fenster gewesen wäre.
quelle
Hier ist eine Lösung, die für mich funktioniert: CSS:
HTML mit "kleiner" JQuery-Hilfe:
Stellen Sie nur sicher, dass maskfied vollständig durch ein echtes Upload-Feld abgedeckt ist.
quelle
Sie können dies gemäß der Antwort im Dialogfeld Datei öffnen auf dem Tag <a> tun
quelle
Ich habe festgestellt, dass, wenn die Eingabe (Datei) außerhalb des Formulars liegt, das Auslösen des Klickereignisses den Dateidialog aufruft.
quelle
Hoffentlich hilft das jemandem - ich habe 2 Stunden damit verbracht, meinen Kopf dagegen zu schlagen:
Wenn Sie in IE8 oder IE9 das Öffnen einer Dateieingabe mit Javascript in irgendeiner Weise auslösen (glauben Sie mir, ich habe sie alle ausprobiert), können Sie das Formular nicht mit Javascript senden, sondern es schlägt nur stillschweigend fehl.
Das Senden des Formulars über eine normale Schaltfläche zum Senden funktioniert möglicherweise, aber das Aufrufen von form.submit (); wird stillschweigend scheitern.
Ich musste meine Schaltfläche zum Auswählen von Dateien mit einer transparenten Dateieingabe überlagern, die funktioniert.
quelle
Das hat bei mir funktioniert:
quelle
Es ist nicht unmöglich:
Aber irgendwie funktioniert es nur, wenn dies in einer Funktion ist, die über ein Klickereignis aufgerufen wurde.
Möglicherweise haben Sie folgendes Setup:
html:
JavaScript:
quelle
createEvent()
undinitMouseEvent()
wurden veraltet. Sie müssen einCustomEvent()
jetzt verwenden ...Sie können verwenden
quelle