Je pense que le titre est suffisamment clair
Merci pour cet exemple moins connu.
Je pense que le titre est suffisamment clair
.val()
fonctionne sur tous les éléments de type entrée de manière utile, notamment <select>
...même dans les cas de <select multiple>
, les cases à cocher et les boutons radio (dans lesquels .val()
obtient ou définit un tableau de valeurs sélectionnées et pas seulement une chaîne de caractères).
Donc, fondamentalement, ils servent des objectifs différents, même si .attr('value')
se comporte de la même manière dans certaines situations, comme les zones de texte. La méthode préférée est .val()
pour obtenir un comportement cohérent partout.
Juste pour le plaisir, voici un exemple moins connu pour les cases à cocher qui fait que .val()
pratique :
<input name="mytest" type="checkbox" value="1">
<input name="mytest" type="checkbox" value="2">
<input name="mytest" type="checkbox" value="3">
<input name="mytest" type="checkbox" value="4">
Vous pouvez le faire :
$("input[name='mytest']").val([1, 2, 3]);
.... qui vérifiera les 3 premières cases. Vous pouvez l'essayer ici .
Bien écrit ! Vous pourriez ajouter une courte explication sur la normalisation inter-navigateurs que jQuery effectue avec des méthodes comme celle-ci.
Notez également que .attr('value')
lit la valeur originale, et non l'état actuel. Voir aussi.
Pour compléter la réponse d'actis...
De même, .attr('value') renvoie la valeur qui était avant l'édition du champ de saisie. d'entrée. Et .val() renvoie la valeur actuelle.
Lorsque vous travaillez avec un champ de saisie de texte, les méthodes setter de .attr() et .val() fonctionnent différemment.
.val('newval')
définira la valeur que l'utilisateur verra sur la page et mettra à jour la valeur renvoyée par les appels ultérieurs de la méthode .val(). Elle ne définira pas l'attribut value= de l'élément.
EN REVANCHE,
.attr('value','newval')
va définir l'attribut value= sur l'élément. Si l'utilisateur n'a pas tapé et que .val(newval) n'a pas été appelé, cette opération mettra également à jour visuellement le contrôle et la valeur renvoyée par .val().
Vous pouvez approfondir la question avec le jsfiddle suivant :
https://jsfiddle.net/jasonnet/vamLww2k/
Bonne chance.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
2 votes
JQuery .val() vs .attr("value") : stackoverflow.com/questions/8312820/