Tengo una forma como
<form onSubmit="return disableForm(this);" action="upload.php" method="post" name="f" id="wizecho" enctype="multipart/form-data">
<input type="file" name="file" />
<button onClick="return disableForm(this),ajaxUpload(this.form,'wizecho_upload.php', '<br>Uploading image please wait.....<br>'); return false;">
Upload Image
</button>
</form>
Es subir una imagen.
Aquí necesito hacer clic en el botón para cargar la imagen y debo usar onClick
evento. Quiero eliminar el botón de carga y tan pronto como se seleccione el archivo en la entrada, quiero activar el evento. ¿¿Cómo puedo hacer eso??
javascript
jquery
ptamzz
fuente
fuente
Respuestas:
Utilice el evento de cambio en la entrada del archivo.
$("#file").change(function(){ //submit the form here });
fuente
Puede suscribirse al evento onchange en el campo de entrada:
<input type="file" id="file" name="file" />
y entonces:
document.getElementById('file').onchange = function() { // fire the upload here };
fuente
Esta es una pregunta anterior que necesita una respuesta más nueva que abordará la preocupación de @Christopher Thomas arriba en los comentarios de la respuesta de aceptación. Si no navega fuera de la página y luego selecciona el archivo por segunda vez, debe borrar el valor cuando hace clic o hace un inicio táctil (para dispositivos móviles). Lo siguiente funcionará incluso cuando navegue fuera de la página y use jquery:
//the HTML <input type="file" id="file" name="file" /> //the JavaScript /*resets the value to address navigating away from the page and choosing to upload the same file */ $('#file').on('click touchstart' , function(){ $(this).val(''); }); //Trigger now when you have selected any file $("#file").change(function(e) { //do whatever you want here });
fuente
val('')
, lo que no funciona en la mayoría de los navegadores.element.setAttribute("value", "")
Si no está usando jQuery, debe usarelement.value = ""
para que el elemento del archivo se borre realmente correctamente.Haga lo que quiera hacer después de que el archivo se cargue correctamente. Justo después de completar el procesamiento del archivo, establezca el valor del control del archivo en una cadena en blanco. De modo que el .change () siempre se llamará incluso si el nombre del archivo cambia o no. como, por ejemplo, puedes hacer esto y funcionó para mí como un encanto
$('#myFile').change(function () { LoadFile("myFile");//function to do processing of file. $('#myFile').val('');// set the value to empty of myfile control. });
fuente
Solución para los usuarios de vue, que resuelve el problema cuando carga el mismo archivo varias veces y el evento @change no se activa:
<input ref="fileInput" type="file" @click="onClick" /> methods: { onClick() { this.$refs.fileInput.value = '' // further logic for file... } }
fuente
<input type = "file" @ change = "onFileChange" class = "input upload-input" ref = "inputFile" />
onFileChange(e) { //upload file and then delete it from input self.$refs.inputFile.value = '' }
fuente
vainilla js usando es6
document.querySelector('input[name="file"]').addEventListener('change', (e) => { const file = e.target.files[0]; // todo: use file pointer });
fuente