Saya ingin memecat suatu peristiwa ketika pengguna memilih file. Melakukannya dengan.change
acara itu berfungsi jika pengguna mengubah file setiap saat.
Tapi saya ingin memecat acara jika pengguna memilih file yang sama lagi.
- File pilih pengguna
A.jpg
(peristiwa kebakaran) - File pilih pengguna
B.jpg
(peristiwa kebakaran) - File pilih pengguna
B.jpg
(acara tidak menyala, saya ingin memecat)
Bagaimana saya bisa melakukannya?
jquery
html
events
cross-browser
Gadonski
sumber
sumber
.attr("value", "")
atau.val("")
(seperti disarankan oleh @ wagner-leonardi di bawah) penjelajah internet akan memecat acara perubahan sementara chrome tidak.prop("value", "")
Jika sudah mencoba
.attr("value", "")
dan tidak berhasil, jangan panik (seperti yang saya lakukan)lakukan
.val("")
saja, dan akan bekerja dengan baiksumber
Anda cukup mengatur untuk membatalkan jalur file setiap kali pengguna mengklik kontrol. Sekarang, bahkan jika pengguna memilih file yang sama, onchange acara akan dipicu.
sumber
Gunakan acara onClick untuk menghapus nilai input target, setiap kali pengguna mengklik bidang. Ini memastikan bahwa acara onChange akan dipicu untuk file yang sama juga. Bekerja untuk saya :)
Menggunakan TypeScript
sumber
Saya mendapatkan ini untuk bekerja dengan membersihkan nilai input file pada Klik dan kemudian memposting file di Ubah. Ini memungkinkan pengguna untuk memilih file yang sama dua kali berturut-turut dan masih memiliki perubahan acara untuk dikirim ke server. Contoh saya menggunakan plugin formulir jQuery .
sumber
onClick
Kebakaran sebelumnyaonChange
, jadi metode ini sangat bagus untuk saya.Ini bekerja untuk saya
sumber
Solusi VueJs
sumber
Inspirasi dari @braitsch Saya telah menggunakan yang berikut di AngularJS2 saya
input-file-component
Di sini
onClick(event)
saya diselamatkan :-)sumber
Mungkin hal termudah yang dapat Anda lakukan adalah mengatur nilai ke string kosong. Ini memaksanya untuk 'mengubah' file setiap kali bahkan jika file yang sama dipilih lagi.
<input type="file" value="" />
sumber
Inilah solusi React-y way yang menurut saya berhasil bagi saya:
onClick={event => event.target.value = null}
sumber
Jika Anda tidak ingin menggunakan jQuery
Ini berfungsi dengan baik di Firefox, tetapi untuk Chrome Anda perlu menambahkan
this.value=null;
setelah peringatan.sumber
Secara default, properti nilai elemen input dihapus setelah pemilihan file jika input memiliki banyak atribut. Jika Anda tidak membersihkan properti ini, maka acara "ubah" tidak akan diaktifkan jika Anda memilih file yang sama. Anda dapat mengelola perilaku ini menggunakan
multiple
atribut.Referensi
sumber
Anda tidak dapat membuat
change
api di sini (perilaku yang benar, karena tidak ada yang berubah). Namun, Anda bisa mengikatclick
juga ... meskipun ini mungkin terlalu sering menyala ... tidak ada jalan tengah di antara keduanya.sumber
.click()
tidak "memilih ulang".click
sedekat mungkin.Buat untuk input acara klik dan acara perubahan. Acara klik mengosongkan input dan acara perubahan berisi kode yang ingin Anda jalankan.
Jadi acara klik akan kosong ketika Anda mengklik tombol input (sebelum pilih file windows terbuka), karenanya acara perubahan akan selalu memicu ketika Anda memilih file.
sumber
Anda dapat menggunakan
form.reset()
untuk menghapus input filefiles
. Ini akan mengatur ulang semua bidang ke nilai default, tetapi dalam banyak kasus Anda mungkin hanya menggunakan tipe input = 'file' dalam bentuk untuk mengunggah file. Dalam solusi ini tidak perlu mengkloning elemen dan menghubungkan kembali peristiwa lagi.Terima kasih kepada philiplehmann
sumber
Saya mengalami masalah yang sama, saya mencari solusi di atas tetapi mereka tidak mendapatkan penjelasan yang baik apa yang sebenarnya terjadi.
Solusi ini saya tulis https://jsfiddle.net/r2wjp6u8/ tidak melakukan banyak perubahan di pohon DOM, itu hanya mengubah nilai bidang input. Dari aspek kinerja seharusnya sedikit lebih baik.
Tautan ke biola: https://jsfiddle.net/r2wjp6u8/
sumber
Jadi, tidak ada cara untuk 100% memastikan mereka memilih file yang sama kecuali Anda menyimpan setiap file dan membandingkannya secara terprogram.
Cara Anda berinteraksi dengan file (apa yang dilakukan JS ketika pengguna 'mengunggah' file) adalah HTML5 File API dan JS FileReader .
https://www.html5rocks.com/en/tutorials/file/dndfiles/
https://scotch.io/tutorials/use-the-html5-file-api-to-work-with-files-locally-in-the-browser
Tutorial ini menunjukkan kepada Anda cara menangkap dan membaca metadata (disimpan sebagai objek js) saat file diunggah.
Buat fungsi yang menjalankan 'onChange' yang akan membaca-> store-> membandingkan metadata dari file saat ini terhadap file sebelumnya. Kemudian Anda dapat memicu acara Anda ketika file yang diinginkan dipilih.
sumber
Percayalah, itu pasti akan membantu Anda!
Semoga ini bisa membantu banyak dari kalian.
sumber