Wie kann ich erkennen, wenn der Benutzer eine Dateieingabe mithilfe einer HTML-Dateieingabe abbricht?
Mit onChange kann ich erkennen, wann sie eine Datei auswählen, aber ich möchte auch wissen, wann sie abbrechen (schließen Sie den Dateiauswahldialog, ohne etwas auszuwählen).
e.target.files
Antworten:
Obwohl dies keine direkte Lösung ist und auch insofern schlecht, als es nur (soweit ich es getestet habe) mit Onfocus funktioniert (was eine ziemlich einschränkende Ereignisblockierung erfordert), können Sie dies mit den folgenden Ergebnissen erreichen:
Das Schöne daran ist, dass Sie es rechtzeitig mit dem Dateiereignis anhängen / trennen können, und es scheint auch mit versteckten Eingaben gut zu funktionieren (ein klarer Vorteil, wenn Sie eine visuelle Problemumgehung für den beschissenen Standardeingabetyp verwenden = ' Datei'). Danach müssen Sie nur noch herausfinden, ob sich der Eingabewert geändert hat.
Ein Beispiel:
Sehen Sie es in Aktion: http://jsfiddle.net/Shiboe/yuK3r/6/
Leider scheint es nur in Webkit-Browsern zu funktionieren. Vielleicht kann jemand anderes die Firefox / IE-Lösung herausfinden
quelle
addEventListener("focus",fn,{once: true})
. Ich konnte es jedoch überhaupt nicht zum Feuern bringendocument.body.addEventListener
. Ich weiß nicht warum. Stattdessen habe ich das gleiche Ergebnis mitwindow.addEventListener
.mousemove
auf Ereigniswindow.document
zusätzlich zu hörenfocus
aufwindow
scheint überall zu arbeiten (zumindest in modernen Browsern, ich kümmere mich nicht um Vergangenheits Jahrzehnt Wracks). Grundsätzlich kann für diese Aufgabe jedes Interaktionsereignis verwendet werden, das durch einen geöffneten Dialog zum Öffnen von Dateien blockiert wird.Das kannst du nicht.
Das Ergebnis des Dateidialogs wird dem Browser nicht angezeigt.
quelle
change
Ereignis ausgelöst wird.change
Ereignis ausgelöst.Also werde ich meinen Hut in diese Frage werfen, da ich eine neuartige Lösung gefunden habe. Ich habe eine Progressive Web App, mit der Benutzer Fotos und Videos aufnehmen und hochladen können. Wir verwenden WebRTC, wenn möglich, greifen jedoch auf HTML5-Dateiauswahl für Geräte mit weniger Unterstützung zurück * Husten Safari Husten *. Wenn Sie speziell an einer mobilen Webanwendung für Android / iOS arbeiten, die die native Kamera verwendet, um Fotos / Videos direkt aufzunehmen, ist dies die beste Lösung, die mir begegnet ist.
Der Kern dieses Problems besteht darin, dass beim Laden der Seite das
file
istnull
, aber wenn der Benutzer den Dialog öffnet und auf "Abbrechen" drückt, dasfile
ist immer nochnull
, daher wurde es nicht "geändert", sodass kein "Ändern" -Ereignis ausgelöst wird. Für Desktops ist dies nicht schlecht, da die meisten Desktop-Benutzeroberflächen nicht davon abhängig sind, zu wissen, wann ein Abbruch aufgerufen wird. Mobile Benutzeroberflächen, die die Kamera zum Aufnehmen eines Fotos / Videos aufrufen, sind jedoch sehr davon abhängig, zu wissen, wann ein Abbruch gedrückt wird.Ich habe das
document.body.onfocus
Ereignis ursprünglich verwendet , um zu erkennen, wann der Benutzer von der Dateiauswahl zurückgekehrt ist. Dies funktionierte für die meisten Geräte, aber iOS 11.3 hat es unterbrochen, da dieses Ereignis nicht ausgelöst wird.Konzept
Meine Lösung hierfür ist * shudder *, um das CPU-Timing zu messen und festzustellen, ob sich die Seite derzeit im Vordergrund oder im Hintergrund befindet. Auf Mobilgeräten wird der aktuell im Vordergrund stehenden App Verarbeitungszeit zugewiesen. Wenn eine Kamera sichtbar ist, stiehlt sie die CPU-Zeit und setzt den Browser außer Kraft. Alles, was wir tun müssen, ist zu messen, wie viel Verarbeitungszeit unsere Seite hat, wenn die Kamera startet, wird unsere verfügbare Zeit drastisch sinken. Wenn die Kamera geschlossen wird (entweder abgebrochen oder auf andere Weise), wird unsere verfügbare Zeitspitze wieder erhöht.
Implementierung
Wir können das CPU-Timing messen, indem wir
setTimeout()
einen Rückruf in X Millisekunden aufrufen und dann messen, wie lange es gedauert hat, ihn tatsächlich aufzurufen. Der Browser wird es nie genau nach X Millisekunden aufrufen , aber wenn es in der Nähe vernünftig ist, müssen wir im Vordergrund stehen. Wenn der Browser sehr weit entfernt ist (über 10x langsamer als angefordert), müssen wir uns im Hintergrund befinden. Eine grundlegende Implementierung davon ist wie folgt:Ich habe dies auf der neuesten Version von iOS und Android getestet und die native Kamera durch Festlegen der Attribute für das
<input />
Element aufgerufen.Das klappt eigentlich viel besser als ich erwartet hatte. Es werden 10 Versuche ausgeführt, indem angefordert wird, dass ein Timer in 25 Millisekunden aufgerufen wird. Anschließend wird gemessen, wie lange das Aufrufen tatsächlich gedauert hat. Wenn der Durchschnitt von 10 Versuchen weniger als 50 Millisekunden beträgt, gehen wir davon aus, dass wir im Vordergrund stehen müssen und die Kamera weg ist. Wenn es größer als 50 Millisekunden ist, müssen wir immer noch im Hintergrund sein und sollten weiter warten.
Einige zusätzliche Details
Ich habe
setTimeout()
eher verwendet, alssetInterval()
weil letztere mehrere Aufrufe in die Warteschlange stellen können, die unmittelbar nacheinander ausgeführt werden. Dies könnte das Rauschen in unseren Daten drastisch erhöhen, daher habe ich mich daran gehalten,setTimeout()
obwohl dies etwas komplizierter ist.Diese bestimmten Zahlen haben bei mir gut funktioniert, obwohl ich mindestens einmal einen Fall gesehen habe, in dem die Kameraentlassung vorzeitig erkannt wurde. Ich glaube, das liegt daran, dass sich die Kamera möglicherweise nur langsam öffnet und das Gerät möglicherweise 10 Versuche ausführt, bevor es tatsächlich in den Hintergrund tritt. Das Hinzufügen weiterer Versuche oder das Warten von 25 bis 50 Millisekunden vor dem Starten dieser Funktion kann eine Problemumgehung sein.
Desktop
Leider funktioniert dies bei Desktop-Browsern nicht wirklich. Theoretisch ist der gleiche Trick möglich, da die aktuelle Seite Vorrang vor Hintergrundseiten hat. Viele Desktops verfügen jedoch über genügend Ressourcen, um die Seite auch im Hintergrund mit voller Geschwindigkeit laufen zu lassen, sodass diese Strategie in der Praxis nicht wirklich funktioniert.
Alternativlösungen
Eine alternative Lösung, die nicht viele Leute erwähnen, die ich erforscht habe, war das Verspotten von a
FileList
. Wir beginnen mitnull
in<input />
und wenn der Benutzer die Kamera öffnet und abbricht, kehren sie zurücknull
, was keine Änderung darstellt und kein Ereignis auslöst. Eine Lösung wäre, dem<input />
Start der Seite eine Dummy-Datei zuzuweisen , dahernull
wäre die Einstellung auf eine Änderung, die das entsprechende Ereignis auslösen würde.Leider gibt es keine offizielle Möglichkeit, eine zu erstellen
FileList
, und das<input />
Element erfordert eineFileList
bestimmte und akzeptiert keinen anderen Wert als diesenull
. Natürlich könnenFileList
Objekte nicht direkt konstruiert werden, um ein altes Sicherheitsproblem zu lösen, das anscheinend nicht mehr relevant ist. Die einzige Möglichkeit, einen außerhalb eines<input />
Elements zu finden, besteht darin, einen Hack zu verwenden, der Daten kopiert und einfügt, um ein Zwischenablageereignis zu fälschen, das einFileList
Objekt enthalten kann (Sie fälschen im Grunde ein Drag-and-Drop-A-File-On -Ihre-Website-Veranstaltung). Dies ist in Firefox möglich, jedoch nicht für iOS Safari. Daher war dies für meinen speziellen Anwendungsfall nicht möglich.Browser, bitte ...
Unnötig zu sagen, dass dies offensichtlich lächerlich ist. Die Tatsache, dass Webseiten keine Benachrichtigung erhalten, dass sich ein kritisches UI-Element geändert hat, ist einfach lächerlich. Dies ist wirklich ein Fehler in der Spezifikation, da es nie für eine Vollbild-Benutzeroberfläche für die Medienerfassung gedacht war und das Nichtauslösen des "Änderungs" -Ereignisses technisch der Spezifikation entspricht.
Können Browser-Anbieter jedoch bitte die Realität erkennen? Dies könnte entweder mit einem neuen "erledigt" -Ereignis gelöst werden, das ausgelöst wird, auch wenn keine Änderung auftritt, oder Sie könnten sowieso nur "Änderung" auslösen. Ja, das wäre gegen die Spezifikation, aber es ist für mich trivial, ein Änderungsereignis auf der JavaScript-Seite zu dedupieren, aber grundsätzlich unmöglich, mein eigenes "erledigtes" Ereignis zu erfinden. Auch meine Lösung ist eigentlich nur Heuristik, wenn keine Garantie für den Zustand des Browsers besteht.
Derzeit ist diese API für mobile Geräte grundsätzlich unbrauchbar, und ich denke, eine relativ einfache Browseränderung könnte dies für Webentwickler unendlich einfacher machen * tritt aus der Seifenkiste *.
quelle
Wenn Sie eine Datei auswählen und auf Öffnen / Abbrechen klicken, sollte das
input
Element den Fokus verlierenblur
. Angenommen, die Initialevalue
voninput
ist leer, würde jeder nicht leere Wert in Ihremblur
Handler ein OK anzeigen, und ein leerer Wert würde Abbrechen bedeuten.UPDATE: Das
blur
wird nicht ausgelöst, wenn dasinput
ausgeblendet ist. Daher kann dieser Trick bei IFRAME-basierten Uploads nicht verwendet werden, es sei denn, Sie möchten das vorübergehend anzeigeninput
.quelle
blur
wird nicht ausgelöst, wenn Sie eine Datei auswählen. Ich habe es nicht in anderen Browsern versucht.quelle
else
Aussage jemals bewertet wird?Die meisten dieser Lösungen funktionieren bei mir nicht.
Das Problem ist, dass Sie nie wissen, welches Ereignis zuerst ausgelöst wird,
click
oderchange
? Sie können keine Reihenfolge annehmen, da dies wahrscheinlich von der Implementierung des Browsers abhängt.Zumindest in Opera und Chrome (Ende 2015)
click
wird kurz vor dem "Füllen" der Eingabe mit Dateien ausgelöst, sodass Sie nie wissen, wie langefiles.length != 0
es dauertclick
, bis Sie die Auslösung verzögernchange
.Hier ist Code:
quelle
Hören Sie sich auch das Klickereignis an.
Nach Shiboes Beispiel ist hier ein jQuery-Beispiel:
Sie können es hier in Aktion sehen: http://jsfiddle.net/T3Vwz
quelle
Sie können den Abbruch abfangen, wenn Sie dieselbe Datei wie zuvor auswählen und auf Abbrechen klicken: in diesem Fall.
Sie können es so machen:
quelle
Am einfachsten ist es, zu überprüfen, ob sich Dateien im temporären Speicher befinden. Wenn Sie das Änderungsereignis jedes Mal erhalten möchten, wenn der Benutzer auf die Dateieingabe klickt, können Sie es auslösen.
quelle
Shiboes Lösung wäre gut, wenn sie mit einem mobilen Webkit funktionieren würde, aber nicht. Was ich mir einfallen lassen kann, ist, einem dom-Objekt zum Zeitpunkt des Öffnens des Dateieingabefensters einen Mausbewegungsereignis-Listener hinzuzufügen, wie folgt:
Das Mousemove-Ereignis wird von der Seite blockiert, während der Dateidialog geöffnet ist. Wenn es geschlossen ist, wird überprüft, ob Dateien in der Dateieingabe vorhanden sind. In meinem Fall möchte ich, dass ein Aktivitätsindikator die Dinge blockiert, bis die Datei hochgeladen wird. Daher möchte ich meinen Indikator nur beim Abbrechen entfernen.
Dies lässt sich jedoch nicht für Mobilgeräte lösen, da keine Maus zum Bewegen vorhanden ist. Meine Lösung dort ist weniger als perfekt, aber ich denke, es ist gut genug.
Jetzt warten wir auf eine Berührung auf dem Bildschirm, um die gleiche Dateiprüfung durchzuführen. Ich bin ziemlich sicher, dass der Finger des Benutzers nach dem Abbrechen und Deaktivieren dieser Aktivitätsanzeige ziemlich schnell auf dem Bildschirm angezeigt wird.
Man könnte auch einfach den Aktivitätsindikator zum Änderungsereignis für die Dateieingabe hinzufügen, aber auf Mobilgeräten gibt es oft einige Sekunden Verzögerung zwischen der Auswahl des Bildes und dem Auslösen des Änderungsereignisses, so dass die UX für den Aktivitätsindikator viel besser ist Beginn des Prozesses.
quelle
Ich fand dieses Attribut, das bisher einfachste.
Hier
selectedFile
ist eininput type=file
.quelle
Ich weiß, dass dies eine sehr alte Frage ist, aber nur für den Fall, dass sie jemandem hilft, stellte ich bei der Verwendung des Ereignisses onmousemove zum Erkennen des Abbruchs fest, dass es notwendig war, in kurzer Zeit zwei oder mehr solcher Ereignisse zu testen. Dies lag daran, dass der Browser (Chrome 65) jedes Mal, wenn der Cursor aus dem Dialogfenster für die Auswahldatei und wieder aus dem Hauptfenster heraus und wieder hinein bewegt wird, einzelne Onmousemove-Ereignisse generiert. Ein einfacher Zähler für Mausbewegungsereignisse In Verbindung mit einer kurzen Zeitüberschreitung, um den Zähler auf Null zurückzusetzen, war dies ein Vergnügen.
quelle
In meinem Fall musste ich die Schaltfläche "Senden" ausblenden, während Benutzer Bilder auswählten.
Das komme ich auf:
#image-field
ist meine Dateiauswahl. Wenn jemand darauf klickt, deaktiviere ich die Schaltfläche zum Senden von Formularen. Der Punkt ist, wenn der Dateidialog geschlossen wird - egal,#image-field
ob sie eine Datei auswählen oder abbrechen -, den Fokus wieder erhalten hat, also höre ich mir dieses Ereignis an.AKTUALISIEREN
Ich fand, dass dies bei Safari und Poltergeist / Phantomjs nicht funktioniert. Berücksichtigen Sie diese Informationen, wenn Sie sie implementieren möchten.
quelle
Durch die Kombination der Lösungen von Shiboe und alx habe ich den zuverlässigsten Code:
Im Allgemeinen reicht das Mausbewegungsereignis aus, aber falls der Benutzer einen Klick gemacht hat und dann:
... wir bekommen kein Mausbewegungsereignis, daher kein Rückruf abbrechen. Wenn der Benutzer den zweiten Dialog abbricht und eine Maus bewegt, werden zwei Rückrufe abgebrochen. Glücklicherweise sprudelt in beiden Fällen ein spezielles jQuery focusIn-Ereignis in das Dokument, um solche Situationen zu vermeiden. Die einzige Einschränkung ist, wenn man das focusIn-Ereignis blockiert.
quelle
mousemove
Ereignisdocument
beim Auswählen von Dateien im Dialogfeld "Betriebssystem" in Chrome 56.0.2924.87 unter Ubuntu 16.10 festgestellt. Kein Problem, wenn Sie die Maus nicht bewegen oder nur die Tastatur zur Auswahl der Datei verwenden. Ich hatte zu ersetzenmousemove
durch ,keydown
um die so früh wie möglich aufheben zu erkennen, aber nicht „zu früh“, wenn der Dialog war noch offen.Ich sehe, dass meine Antwort ziemlich veraltet wäre, aber trotzdem. Ich hatte das gleiche Problem. Hier ist meine Lösung. Der nützlichste Code war der von KGA. Aber es funktioniert nicht ganz und ist ein bisschen kompliziert. Aber ich habe es vereinfacht.
Der Hauptstörer war auch die Tatsache, dass das Änderungsereignis nicht sofort nach dem Fokussieren eintritt, sodass wir einige Zeit warten müssen.
"#appendfile" - welcher Benutzer klickt, um eine neue Datei anzuhängen. Hrefs erhalten Fokusereignisse.
quelle
Sie können dies nur unter bestimmten Umständen feststellen. Insbesondere in Chrome löscht Chrome die Datei und löst das Ereignis onChange aus, wenn zuvor eine Datei ausgewählt wurde und dann auf das Dateidialogfeld geklickt und auf Abbrechen geklickt wird.
https://code.google.com/p/chromium/issues/detail?id=2508
In diesem Szenario können Sie dies erkennen, indem Sie das Ereignis onChange behandeln und die Eigenschaft files überprüfen .
quelle
Folgendes scheint für mich zu funktionieren (auf Desktop, Windows):
Dies verwendet zwar anglejs $ q, aber Sie sollten es bei Bedarf durch ein anderes Versprechen-Framework ersetzen können.
Getestet auf IE11, Edge, Chrome, Firefox, aber es scheint nicht auf Chrome auf einem Android-Tablet zu funktionieren, da das Focus-Ereignis nicht ausgelöst wird.
quelle
Das
file
Feld vom Typ "reagiert frustrierend nicht auf viele Ereignisse (Unschärfe wäre sehr schön). Ich sehe viele Leute, diechange
orientierte Lösungen vorschlagen, und sie werden herabgestimmt.change
funktioniert, aber es hat einen großen Fehler (im Vergleich zu dem, was wir wollen ).Wenn Sie eine Seite mit einem Dateifeld neu laden, öffnen Sie das Feld und klicken Sie auf Abbrechen. Frustrierend ändert sich nichts .
Was ich gewählt habe, ist das Laden in einem geschlossenen Zustand.
section#after-image
in meinem Fall nicht sichtbar. Bei meinenfile field
Änderungen wird eine Upload-Schaltfläche angezeigt. Nach erfolgreichem Uploadsection#after-image
wird angezeigt.change
Ereignis durch diesen Abbruch ausgelöst, und dort kann (und kann) ich meine Upload-Schaltfläche wieder ausblenden, bis eine richtige Datei ausgewählt ist.Ich hatte das Glück, dass dieser geschlossene Zustand bereits das Design meiner Form war. Sie müssen nicht denselben Stil verwenden, sondern lediglich die Schaltfläche zum Hochladen zunächst ausblenden und beim Ändern ein ausgeblendetes Feld oder eine Javascript-Variable auf etwas setzen, das Sie beim Senden überwachen können.
Ich habe versucht, den Wert von Dateien [0] zu ändern, bevor mit dem Feld interagiert wurde. Dies hat nichts in Bezug auf den Wechsel bewirkt.
Also ja,
change
funktioniert, mindestens so gut wie wir es bekommen werden. Das Dateifeld ist aus offensichtlichen Gründen gesichert, aber zur Frustration gut gemeinter Entwickler.Es passt nicht zu meinem Zweck, aber Sie können möglicherweise
onclick
eine Warnmeldung laden (keinealert()
, da dies die Seitenverarbeitung blockiert) und sie ausblenden, wenn eine Änderung ausgelöst wird und files [0] null ist. Wenn keine Änderung ausgelöst wird, bleibt das div in seinem Zustand.quelle
Es gibt eine hackige Möglichkeit, dies zu tun (Rückrufe hinzufügen oder eine verzögerte / versprochene Implementierung anstelle von
alert()
Aufrufen auflösen ):So funktioniert es: Während der Dateiauswahldialog geöffnet ist, empfängt das Dokument keine Mauszeigerereignisse. Es gibt eine Verzögerung von 1000 ms, damit der Dialog tatsächlich angezeigt wird und das Browserfenster blockiert wird. Eingecheckt in Chrome und Firefox (nur Windows).
Dies ist natürlich keine zuverlässige Methode, um abgebrochene Dialoge zu erkennen. Dies könnte jedoch das Verhalten der Benutzeroberfläche für Sie verbessern.
quelle
Hier ist meine Lösung mit dem Dateieingabefokus (ohne Timer)
quelle
Error: { "message": "Uncaught SyntaxError: missing ) after argument list", "filename": "https://stacksnippets.net/js", "lineno": 51, "colno": 1 }
Dies ist bestenfalls hackig, aber hier ist ein funktionierendes Beispiel meiner Lösung, um festzustellen, ob ein Benutzer eine Datei hochgeladen hat oder nicht, und um ihm nur dann zu erlauben, fortzufahren, wenn er eine Datei hochgeladen hat.
Grundsätzlich verstecken die
Continue
,Save
,Proceed
oder was auch immer Ihre Taste ist. Dann greifen Sie im JavaScript auf den Dateinamen zu. Wenn der Dateiname keinen Wert hat, wird dieContinue
Schaltfläche nicht angezeigt. Wenn es einen Wert hat, zeigen Sie die Schaltfläche. Dies funktioniert auch, wenn sie zuerst eine Datei hochladen und dann versuchen, eine andere Datei hochzuladen und auf Abbrechen klicken.Hier ist der Code.
HTML:
JavaScript:
CSS:
Für das CSS bedeutet dies viel, die Website und die Schaltfläche für alle zugänglich zu machen. Gestalten Sie Ihren Button nach Ihren Wünschen.
quelle
Nun, das beantwortet Ihre Frage nicht genau. Ich gehe davon aus, dass Sie ein Szenario haben, in dem Sie eine Dateieingabe hinzufügen und die Dateiauswahl aufrufen. Wenn der Benutzer auf Abbrechen klickt, entfernen Sie einfach die Eingabe.
Wenn dies der Fall ist, dann: Warum leere Dateieingaben hinzufügen?
Erstellen Sie die Datei im laufenden Betrieb, fügen Sie sie jedoch nur dann zum DOM hinzu, wenn sie ausgefüllt ist.
Also erstelle ich hier <input type = "file" /> im laufenden Betrieb, binde an das Änderungsereignis und rufe dann sofort click auf. Bei Änderung wird nur ausgelöst, wenn der Benutzer eine Datei auswählt und auf OK drückt. Andernfalls werden keine Eingaben zum DOM hinzugefügt und daher nicht gesendet.
Arbeitsbeispiel hier: https://jsfiddle.net/69g0Lxno/3/
quelle
// Verwenden Sie Hover anstelle von Unschärfe
quelle
Wenn Sie JQuery bereits benötigen, erledigt diese Lösung möglicherweise die Arbeit (dies ist genau der Code, den ich in meinem Fall tatsächlich benötigt habe, obwohl die Verwendung eines Versprechens nur dazu dient, den Code zu zwingen, zu warten, bis die Dateiauswahl aufgelöst wurde):
});
quelle
In diesem Thread werden mehrere Lösungen vorgeschlagen, und diese Schwierigkeit, zu erkennen, wann der Benutzer auf die Schaltfläche "Abbrechen" im Dateiauswahlfeld klickt, ist ein Problem, das viele Menschen betrifft.
Tatsache ist, dass es keine 100% zuverlässige Methode gibt, um festzustellen, ob der Benutzer auf die Schaltfläche "Abbrechen" im Dateiauswahlfeld geklickt hat . Es gibt jedoch Möglichkeiten, zuverlässig zu erkennen, ob der Benutzer der Eingabedatei eine Datei hinzugefügt hat . Das ist also die Grundstrategie dieser Antwort!
Ich habe beschlossen, diese Antwort hinzuzufügen, da die anderen Antworten anscheinend in den meisten Browsern nicht funktionieren oder auf Mobilgeräten garantiert sind.
Kurz gesagt basiert der Code auf 3 Punkten:
Zum besseren Verständnis lesen Sie den folgenden Code und die Hinweise.
Vielen Dank! = D.
quelle
Wir haben in Winkel wie unten erreicht.
HTML
TS
quelle
Fügen Sie einfach "Listener" zu Ihrer Eingabe hinzu, deren Typ Datei ist. dh
Ich habe jQuery verwendet und natürlich kann jeder Valina JS verwenden (gemäß den Anforderungen).
quelle
.change()
wird nicht zuverlässig aufgerufen, wenn der Benutzer in der Dateiauswahl auf "Abbrechen" klickt.quelle
Lösung für die Dateiauswahl mit versteckter Eingabe
Hinweis: Dieser Code erkennt keine Stornierung. Er bietet eine Möglichkeit, die Notwendigkeit zu umgehen, ihn in einem häufigen Fall zu erkennen, in dem Personen versuchen, ihn zu erkennen.
Ich bin hierher gekommen, als ich nach einer Lösung für das Hochladen von Dateien mithilfe einer versteckten Eingabe gesucht habe. Ich glaube, dass dies der häufigste Grund ist, nach einer Möglichkeit zu suchen, die Stornierung der Dateieingabe zu erkennen (Dialogfeld "Datei öffnen" -> Wenn eine Datei ausgewählt wurde, führen Sie einige aus Code, sonst nichts tun), hier ist meine Lösung:
Anwendungsbeispiel:
Beachten Sie, dass, wenn keine Datei ausgewählt wurde, die erste Zeile nur einmal zurückgegeben
selectFile()
wird und erneut aufgerufen wird (oder wenn SiefileSelectorResolve()
von einer anderen Stelle aus angerufen haben ).Ein anderes Beispiel:
quelle
Sie können einen Listener für jquery change im Eingabefeld erstellen und anhand des Werts des Felds erkennen, dass der Benutzer das Upload-Fenster abbricht oder schließt.
Hier ist ein Beispiel:
quelle