web-dev-qa-db-fra.com

Comment val () peut-il retourner un numéro?

Dans le valdocs é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

54
gdoron

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>
25
Alex K.

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);
65
osahyoun

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.

15
Klaus Byskov Pedersen

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()
1
carcus88

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()).

0
MSC