Dans le val
docs écrit cette description:
.val () Renvoie: String, Number, Array
J'ai essayé d'obtenir un Number
, mais il semble renvoyer string
uniquement. Y a-t-il quelque chose que je fais mal?
$('#gdoron').val('1');
alert($('#gdoron').val() === '1'); // true
alert(typeof $('#gdoron').val()); // string.
$('#gdoron').val(1);
alert($('#gdoron').val() === 1); // false
alert(typeof $('#gdoron').val()); // string (not "number"!)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="gdoron" />
Ma question est: comment val()
peut-il renvoyer un numéro comme le dit la documentation? La question n'est pas de savoir comment analyser la chaîne.
La
Certains éléments HTML5, par exemple le progrès;
alert(typeof $("#prog").val()); // number
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<progress value="50" max="100" id="prog"></progress>
L'attribut value
d'une entrée de texte renvoie toujours une chaîne. Vous devez parseInt
la valeur pour obtenir un entier:
parseInt($('#myInput').val(), 10);
J'ai fait un petit tour rapide, et je pense avoir une réponse. Si vous regardez l'implémentation de la fonction val
vous pouvez voir que si un soi-disant val-hook est en place, si le val-hook renvoie un nombre, ce nombre sera être retourné tel quel à partir de la fonction val. J'ai trouvé cette discussion qui suggère que les hooks val sont principalement utilisés par les plugins pour créer des contrôles personnalisés, tels que des curseurs, etc., où la valeur de retour "naturelle" de val
pourrait être un nombre entier. J'espère que cela jette un peu de lumière sur votre question.
Vous pouvez simplement créer un plugin jquery à utiliser au lieu de val () qui le ferait. Ici, je crée la fonction nval () à utiliser au lieu de val () lors de la récupération d'une valeur d'éléments.
$.fn.nval = function() {
return Number(this.val())
};
Ensuite, dans votre code, utilisez simplement ce qui suit pour obtenir la valeur sous forme de nombre
$('#elementID').nval()
Hmm. Pour tout cela dans la console, jQuery $($0).val()
et Javascript $0.value
Renvoient la chaîne "3":
<input type='number' value='3'/>
<input type='text' value='3'/>
<input type='radio' value='3'/>
<input type='checkbox' value='3'/>
Je pense donc que la documentation jQuery val () pourrait être plus claire. Je ne vois pas comment cela pourrait retourner une valeur numérique, je suggère donc d'utiliser parseInt($($0).val())
ou parseFloat($($0).val())
.