ma balise span ressemble à ceci:
'<span id="quantity_value" value="1">1</span>'
Et la valeur change en utilisant jquery.
Je veux avoir la valeur de cette span comme paramètre, quand je essayez avec le script js:
var number = document.getElementById("quantity_value");
Mon nombre est égal à:
<span id="quantity_value" value="1">1</span>
Mais je veux que le nombre soit égal à la valeur .
3 Réponses :
Si vous ajoutez:
console.log (nombre); juste après l'avoir défini, et regardez le débogueur, vous verrez qu'il a différentes propriétés.
Vous voulez obtenir la propriété innerHTML :
number.innerHTML
Il y a un problème avec cela. C'est statique je veux dire quand je change le nombre html.innerHTML ne change pas
La variable est lue au moment de l'exécution. Il n'est pas lié à l'élément. Donc, si l'élément change, la variable aura la même valeur. Vous devez relire la valeur après la modification ou lier un événement à l'élément qui mettra automatiquement à jour la variable.
Utilisez
var number = document.getElementById("quantity_value");
En écrivant uniquement
var number = document.getElementById("quantity_value").innerHTML;
vous stockez l'objet dans la variable.
Je recommanderais probablement de nommer la variable quantityValue ou quelque chose pour une auto-documentation supplémentaire. number est une petite faute de frappe loin de Number et peut potentiellement causer des problèmes plus importants. :)
Je suggérerais de changer la valeur en un champ de données pour corriger votre code HTML non conforme aux normes, puis vous pouvez récupérer cet attribut lorsque vous avez besoin de la valeur. Par exemple:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <span id="quantity_value" data-value="1">1</span> <div><button id="changeValue">Change Value</button></div> <div><button id="getValue">Get Value</button></div>
$('#changeValue').on('click', function(){
var newValue = Date.now() % 100;
//change the data attribute
$('#quantity_value').text(newValue).data('value', newValue);
});
$('#getValue').on('click', function(){
console.log($('#quantity_value').data('value'));
});
Je ne comprends absolument pas comment cela fonctionne. Je suppose que $ ('# changeValue'). est uniquement pour les tests, ai-je raison si oui, alors pourquoi 1 n'a pas de valeur
Oui, les boutons ne sont là que pour les tests. Comme indiqué dans les commentaires de votre question, value n'est pas un attribut valide pour les éléments span , tel que défini par le standard Web HTML. En tant que tel, cette réponse utilise un attribut de données, data-value , à la place de la valeur que vous tentiez d'utiliser. Les attributs de données peuvent être sur à peu près n'importe quel élément, et vous pouvez utiliser la méthode jQuery data () pour obtenir / définir la valeur de celui-ci.
Avec jquery, vous pouvez dire
$ ('# Quantity_value'). Val ()pour obtenir la valeur de la plage. La première partie est le sélecteur qui sélectionne votre élément span. Le .val () est une méthode pour obtenir la valeur de la valeur d'attribut.var number = document.getElementById ("quantité_value"). textContent(vanilla JS) ouvar number = document.getElementById ("quantité_value"). text ();(jQuery )En fait, comme il s'agit d'un span, avoir une valeur n'a pas de sens ici. Les portées ne sont pas des éléments d'entrée.
attendez, que voulait exactement l'OP? Le contenu du texte à l'intérieur de l'élément, ou l'attribut value de span?
" Et la valeur change en utilisant jquery. " Veuillez expliquer cela plus en détail
@Smankusors Je veux rediriger sur la page ('/../number') mais quand je passe var number = document.getElementById ("quantité_value"). InnerHTML; c'est statique, mon nombre est égal à 1 même s'il a changé
@Taplar j'ai le script jquery, quand je clique sur + j'ajoute 1 à la valeur et à innerhtml et si je clique - je supprime 1 de la valeur et de l'internalhtml
@Taplar vous avez dit que span n'a pas de valeur, puis-je rendre l'élément d'entrée invisible?
Vous pouvez (
), ou vous pouvez utiliser un attribut de données. Jetez un œil à ma réponse ci-dessous pour un exemple utilisant des attributs de données. @Sebqu