Die zweite Verwendung der Eingabedatei löst keine Änderung mehr aus

8

Ich habe eine Schaltfläche zum Hochladen von Bildern, die die Datei automatisch hochlädt, wenn sie im Suchfenster ausgewählt wurde.
Trotzdem funktioniert es beim zweiten Mal nicht und das liegt daran, dass das onChange-Ereignis nicht ausgelöst wird. Warum ist das so?

Hier ist ein Anwendungsfall:
1. Mit einem Klick auf die Schaltfläche rufe ich uploadMessagePicture () auf, wodurch das Suchfenster geöffnet wird.
2. Wenn der Benutzer ein Bild ausgewählt hat, wird ein onChange-Ereignis erkannt, das den ajaxFileUpload () auslöst und den Bildbearbeitungsbereich anzeigt.
3. Wenn der Upload abgeschlossen ist, wird eine Vorschau des Bildes angezeigt. 4. Der Benutzer löscht das Bild, indem er deleteMessageImage () aufruft (wodurch auch die Felder gelöscht und der Fotoeditor ausgeblendet werden).
5. Der Benutzer versucht, ein anderes Bild hochzuladen.

An dieser Stelle erscheint das Durchsuchen-Fenster, aber wenn ich ein Bild auswähle, wird das onChange-Ereignis nicht ausgelöst, so dass nichts passiert ... (Es scheint auch nicht so, als ob der Dateiname sogar auf den Wert der Eingabe übertragen würde Feld.)
Ich bin auf Firefox 23.0.1

Hier ist der HTML-Code:

%Vor%

Hier ist das Javascript, um das Bild automatisch hochzuladen

%Vor%

Hier ist das Javascript, um das Bild zu löschen und die Felder zu löschen

%Vor%

Jede Hilfe wäre großartig! Danke!

    
ether 28.10.2013, 19:18
quelle

5 Antworten

3

Dank Kodierrhythmus, um mich auf die richtige Spur zu führen.
Was ich getan habe, war eigentlich nur den on ("change") Anruf auf dem Feld wieder hinzuzufügen.
Also habe ich die Funktion clearPictureAttachment () (die beim Löschen eines Bildes aufgerufen wird) nur so geändert:

%Vor%

Nochmals vielen Dank!

    
ether 01.10.2014, 18:28
quelle
8

Meine Vermutung ist, dass Sie Ihre Funktionalität mit der gleichen Bilddatei immer wieder testen.

Wenn Sie dieselbe Datei auswählen, wird das Ereignis onChange von input[type=file] nicht ausgelöst.

Eine andere Datei mit demselben Namen würde das Ereignis ebenfalls nicht auslösen. Wählen Sie eine andere Bilddatei - es wird passieren.

Um dies zu vermeiden, können Sie das Formular zurücksetzen, um sicherzustellen, dass die Auswahl einer Datei für ein sauberes file -Steuerelement

erfolgt     
Sych 12.11.2013 18:27
quelle
4

Synch hat teilweise recht, wenn das Ereignis onchange nicht für die gleiche Datei ausgelöst wird. Genauer gesagt wird onchange im Falle einer Eingabedatei (Szenario, das von ether erwähnt wird) berücksichtigt Speicherort für die Ereignisauslösung.

  

Probieren Sie dies aus, nachdem Sie eine Datei ausgewählt haben

     

In jQuery    $("#image_message_upload [type='file']")[0].value

     
    

Sie werden etwas wie bekommen     " C: \ fakepath \ land-und-mobil-redirect-for-wordpress-dwpsxm-clipar.jpg " als Ausgabe (das ist der Speicherort der Datei ausgewählt)

  

Das bedeutet entweder, dass Sie den Dateinamen oder seine Position ändern, was nicht richtig ist. Daher können wir beim Löschen der Datei logischerweise das Eingabewertattribut auf leer setzen ( ")

  

$("#image_message_upload [type='file']")[0].value=""

Das Hinzufügen dieser Zeile (innerhalb von clearPictureAttachment (), wie in dieser Frage beschrieben) setzt den Dateieingabetyp zurück und Sie können dieselbe Bilddatei ohne Probleme auswählen.

Prost:)

    
MKP 29.12.2016 14:48
quelle
3

@Sync hat mir die Idee gegeben, dieses Problem zu lösen.

Hier ist der Arbeitscode, was Sie tun müssen, ist die Dateieingabe zu klonen.

%Vor%

und das Ereignis wird immer noch zum zweiten Mal ausgelöst.

    
codingrhythm 13.07.2014 23:27
quelle
0

In Winkel

HTML

%Vor%

TS

%Vor%     
Imran Panjwani 25.01.2018 12:05
quelle