2010-07-19 19 views
13

¿Es posible determinar si el usuario ha seleccionado un archivo para un tipo de entrada particular campo "archivo" usando javascript/jQuery?jQuery: cómo obtener el "valor" del campo de entrada de carga de archivo

He desarrollado un tipo de campo personalizado para ExpressionEngine (CMS basado en PHP) que permite a los usuarios cargar y almacenar sus archivos en Amazon S3, pero el servicio de alojamiento EE más popular ha establecido un límite máximo de 20 archivos. Me gustaría permite al usuario subir 20 archivos, editar la entrada nuevamente para agregar 20 más, etc. Desafortunadamente, al editar la entrada, los primeros 20 archivos tienen un campo de entrada de archivo "reemplazar esta imagen" que parece estar eliminando la posibilidad de cargar imágenes nuevas . Me gustaría eliminar los campos de entrada de archivos no utilizados a través de javascript cuando se envíe el formulario.

Respuesta

20

Sí, puede leer el valor e incluso enlazar al evento change si lo desea.

<html> 
<head> 
    <title>Test Page</title> 
    <script src="http://code.jquery.com/jquery-latest.js"></script> 
    <script type="text/javascript"> 
    $(function() 
    { 
    $('#tester').change(function() 
    { 
     console.log($(this).val()); 
    }); 
    }); 
    </script> 
</head> 

<body> 

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

</body> 
</html> 

Pero hay otras, soluciones múltiples de carga que se adapte mejor a sus necesidades, tales como bpeterson76 publicados.

+0

apreciarlo. no pensé que .val() devolvería algo en una entrada de archivo, supongo que debería haberlo intentado :) el material de carga múltiple no está bastante en línea con la dirección en la que quiero ir esta vez, aunque por lo general Estoy de acuerdo. Gracias de nuevo. –

+0

Los campos de entradas de archivos son perfectamente legibles, simplemente no se pueden escribir. –

0

Este cargador ha funcionado muy bien para mis propósitos: http://webdeveloperplus.com/jquery/ajax-multiple-file-upload-form-using-jquery/

El beneficio para usarlo como base para su codificación es que los archivos se cargan de forma asíncrona, por lo que no hay necesidad de limitar a 20 a la vez. Hay un beneficio definido de UI para hacer la carga mientras el usuario está buscando.

¡El cambio de tamaño es una característica muy bonita también, si la necesita!

2

Este código eliminará todas las entradas de archivos vacíos de la forma y luego enviarlo:

HTML:

<form action="#"> 
    <input type="file" name="file1" /><br /> 
    <input type="file" name="file2" /><br /> 
    <input type="file" name="file3" /><br /> 
    <input type="file" name="file4" /><br /> 
    <input type="file" name="file5" /><br /> 

    <input type="submit" value="Submit" /> 
</form> 

JavaScript:

$(function() { 
    $("form").submit(function(){ 
    $("input:file", this).filter(function(){ 
     return ($(this).val().length == 0); 
    }).remove(); 
    }); 
}); 

Ejemplo: http://jsbin.com/axuka3/

Cuestiones relacionadas