PS: Esto no es una respuesta sino solo un complemento a las respuestas anteriores.
sólo para el futuro de la referencia que han incluido un buen ejemplo que podría ayudarnos a limpiar nuestras dudas:
intente lo siguiente. En este ejemplo voy a crear un selector de archivos que se puede utilizar para seleccionar un archivo y luego voy a tratar de recuperar el nombre del archivo que he seleccionado: El código HTML está por debajo de:
<html>
<body>
<form action="#" method="post">
<input id ="myfile" type="file"/>
</form>
<script type="text/javascript" src="jquery.js"> </script>
<script type="text/javascript" src="code.js"> </script>
</body>
</html>
El archivo code.js contiene el siguiente código jQuery. Intente usar ambos de los fragmentos de código de jQuery uno por uno y vea el resultado.
código jQuery con attr ('valor'):
$('#myfile').change(function(){
alert($(this).attr('value'));
$('#mybutton').removeAttr('disabled');
});
código jQuery con val():
$('#myfile').change(function(){
alert($(this).val());
$('#mybutton').removeAttr('disabled');
});
de salida:
El salida de jQuer y el código con attr ('valor') será 'indefinido'. La salida del código de jQuery con val() será el nombre de archivo que seleccionó.
Explicación: Ahora puede comprender fácilmente lo que las respuestas principales querían transmitir. El resultado del código jQuery con attr ('valor') será 'indefinido' porque inicialmente no se seleccionó ningún archivo, por lo que el valor no está definido. Es mejor usar val() porque obtiene el valor actual.
Para ver por qué se devuelve el valor indefinido, intente este código en su html y verá que ahora el atributo ('valor') devuelve 'prueba' siempre, porque el valor es 'prueba' y anteriormente no estaba definido
<input id ="myfile" type="file" value='test'/>
Espero que haya sido útil para usted.
jQuery .val() vs .attr(): http://stackoverflow.com/questions/4837133/whats-the-difference-between-jquery-val-and-attrvalue –
La verdadera razón es que 'val () 'solo obtiene el valor de cierto tipo de etiquetas, por ejemplo, puede obtener el valor de una entrada con' val() 'pero si agrega el atributo' value' a una etiqueta 'a' o una etiqueta' div', no funcionará Vas a tener que usar '.attr ("valor")' – Seraf