Estoy tratando de abrazar jQuery 100% con es simple y elegante de la API, pero me he topado con una incoherencia entre la API y recto-para arriba HTML que no acabo de entender.

Tengo un AJAX cargador de archivos de secuencia de comandos (que funciona correctamente) que quiero que se ejecute cada vez que el archivo de entrada de los cambios de valor. Aquí está mi código de trabajo:

<input type="file" size="45" name="imageFile" id="imageFile" onchange="uploadFile()">

Cuando tengo que convertir el onchange evento a un jQuery aplicación:

$('#imageFile').change(function(){ uploadFile(); });

el resultado no es el mismo. Con el onchange atributo de la uploadFile() función es llamada cada vez que el valor se cambia como se espera. Pero con el jQuery API .change() controlador de eventos, el evento sólo se desencadena la primera vez que un valor es el cambio. Cualquier cambio de valor después de que se ignora. Esto parece malo para mí, pero seguramente este no puede ser un descuido por jQuery, derecho?

Ha nadie encontrado con el mismo problema y tiene solución o la solución al problema aparte de lo que he descrito anteriormente?

  • Estás usando IE por casualidad?
  • Yo por lo general evitar la IE como de la peste. LOL Pero en serio, yo se desarrollan en la cámara de combustión para que yo pueda tomar ventaja de Firebug y su pavor y, a continuación, probar en IE, Chrome y Safari. ¿Por qué lo preguntas? El .live () (método de respuesta a continuación) resuelto este problema para mí.
  • ¿Por qué no tiene su uploadFile() cualquier parámetro? Quiero llamar a la una ASP.NET MVC método como este, pero el javascript debe enviar el archivo que se quiere subir como parámetro
InformationsquelleAutor gurun8 | 2010-04-27

3 Comentarios

  1. 87

    es el ajax uploader de actualizar el elemento de entrada?
    si es así, usted debe considerar el uso de .live() método.

     $('#imageFile').live('change', function(){ uploadFile(); });

    actualización:

    de jQuery 1.7+ debe utilizar ahora .en()

     $(parent_element_selector_here or document ).on('change','#imageFile' , function(){ uploadFile(); });
    • Gracias por la actualización
    • funciona para IE????
    • Enlace de evento de cambio en Jquery no funciona en IE<9, en lugar de utilizar nativo onchange.
  2. 63

    Como de jQuery 1.7, el .live() método está en desuso. Uso .en() para asociar controladores de eventos. Los usuarios de versiones anteriores de jQuery debe utilizar .delegado() en preferencia .live(). Referencia: http://api.jquery.com/on/

    $('#imageFile').on("change", function(){ uploadFile(); });
    • Buena captura, en la obsolescencia de live(), pero la forma de mostrar que no funciona. La forma que se muestra por @LuisMelgrati obras. Y, de hecho, la página que enlace a da la segunda forma como la sustitución de esta función.
    • Gracias @PhiLho, acabo de encontrar el enlace que me estaba refiriendo era .live() no .en()
  3. 10

    Yo no podía llegar en IE8+ a trabajar por la adición de un jQuery controlador de eventos para el archivo de tipo de entrada. Tuve que ir de la vieja escuela y agregar la onchange="" atributo a la etiqueta input:

    <input type='file' onchange='getFilename(this)'/>
    
    function getFileName(elm) {
       var fn = $(elm).val();
       ....
    }

    EDICIÓN:

    function getFileName(elm) {
       var fn = $(elm).val();
       var filename = fn.match(/[^\/]*$/)[0]; //remove C:\fakename
       alert(filename);
    }

Dejar respuesta

Please enter your comment!
Please enter your name here