2011-07-08 12 views
9

Esto es algo extraño que noté en cromo. si el usuario selecciona un archivo y luego vuelve a seleccionar el mismo archivo ab abriendo nuevamente el diálogo de archivo, cromo no activa el evento onchange mientras que firefox lo hace.archivo de entrada en evento de cambio no se activa en cromo

¿Alguien lo notó también?

Respuesta

3

Esta es una característica conocida de Chrome y una rápida Google on the topic traerá algunas discusiones interesantes.

Tiene sentido para mí que el evento change no dispararía ya que nada ha cambiado (que está seleccionando el mismo archivo)

cuanto a su pregunta, ¿qué es exactamente lo preguntas? ¿Estás buscando una forma de cambiar este comportamiento o solo quieres saber si hemos notado esto?

Si desea evitar este comportamiento, simplemente puede crear una nueva entrada de archivo en su Javascript y reemplazar la anterior. De esta forma, su evento change está garantizado para disparar.

+4

actualmente sólo establece el valor de entrada a cadena vacía y se restablece el usuario, por lo que si el usuario seleccionará el mismo archivo, lo haré obtener el evento. Debo decir que no estoy de acuerdo con usted en que esto funciona como se esperaba. Debería recibir una notificación de que el usuario ha seleccionado un archivo (cualquier archivo, incluso si es el mismo), pero en este enfoque, usted (el programador) no sabe que se produjo esta acción. – Amir

3
function resetFileInput($element) { 
    var clone = $element.clone(); 
    $element.replaceWith(clone); 
} 

y luego usar:

$('#element_id').on('change', function(){ 
... 
}); 

funcionado bien para mí!

0

Una solución más fácil para restablecer un archivo de entrada que funciona bien para mí:

document.getElementById('idOfInput').value = ''; 
+0

Tenga en cuenta que esto no funcionará en IE (IE8-IE11 +) ya que la entrada del archivo está marcada como 'readonly'. Una alternativa es [ajustarlo en un formulario y restablecer el formulario] (http://stackoverflow.com/a/14587296/1030702). – Bob

Cuestiones relacionadas