2011-05-09 10 views
62

tengo una forma tancómo disparar en caso de selección de ficheros

<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', '&lt;br&gt;Uploading image please wait.....&lt;br&gt;'); return false;"> 
     Upload Image 
    </button> 
</form> 

Es para subir una imagen.

Aquí tengo que hacer clic en el botón para cargar la imagen y tengo que usar el evento onClick. Quiero eliminar el botón de carga y, tan pronto como se seleccione el archivo en la entrada, deseo activar el evento. ¿¿Cómo puedo hacer eso??

+0

Si usted está preocupado acerca de cómo seleccionar el mismo archivo dos veces, @applecrusher tiene una solución mejor que la respuesta seleccionada http://stackoverflow.com/a/40581284/1520304 –

Respuesta

92

Utilice el evento de cambio en el archivo de entrada.

$("#file").change(function(){ 
     //submit the form here 
}); 
+24

y ¿qué ocurre cuando envía el formulario de forma asíncrona, no navega fuera de la página y luego intenta cargar el mismo archivo nuevamente? Este código solo se ejecutará una vez, la segunda vez, seleccionando el mismo archivo no ejecutará un evento de cambio –

+3

La objeción de @ChristopherThomas es exactamente la razón por la que estoy aquí, y afortunadamente hay una respuesta mucho más abajo que lo resuelve, años después : http://stackoverflow.com/a/40581284/4526479 –

+0

change event no se activa cuando selecciono el mismo archivo nuevamente. ¿Alguna otra manera que pueda funcionar todo el tiempo? –

51

Usted puede suscribirse para el evento onchange en el campo de entrada:

<input type="file" id="file" name="file" /> 

y luego:

document.getElementById('file').onchange = function() { 
    // fire the upload here 
}; 
23

Esta es una pregunta más antiguo que necesita una respuesta más reciente que se dirigirá a la preocupación de Thomas @Christopher más arriba en los comentarios de la respuesta aceptar. Para salir de la página y luego seleccionar el archivo por segunda vez, debe borrar el valor al hacer clic o al hacer una entrada táctil (para dispositivos móviles). El siguiente funcionará incluso cuando se desplaza fuera de la página y utiliza 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) { 

} 
+0

MUCHAS GRACIAS. ESTA ES LA RESPUESTA. Este chico lo clavó. Oscuro oyente del evento ftw. APLASTAR ESAS MANZANAS. –

+0

¿Es compatible con varios navegadores? Parece que solo está usando 'val ('')', que no funciona en la mayoría de los navegadores. – SeanKendle

+0

¿En qué navegador funciona, no lo intentó? Intente clonar el objeto consigo mismo si todavía es un problema para usted. – applecrusher

Cuestiones relacionadas