Calculer Le Total Des Onclick Javascript
Je suis en train d'apprendre le Javascript et je suis encore très nouveau pour la langue.
Dans mon code HTML, j'ai deux listes.
Dans la première liste de sélection vous sélectionnez le produit que vous voulez
Dans le deuxième, vous sélectionnez la quantité de produit dont vous avez besoin.
J'ai tenté d'écrire un code javascript qui effectue les opérations suivantes:
- Obtenir la valeur du produit et de l'affecter à une variable
- Obtenir le n ° de produit et de l'affecter à une variable
- Multiplier le produit de la valeur avec le nombre de produits
- Lorsque l'utilisateur clique sur le bouton envoyer de l'affichage d'une boite d'alerte total
Cependant mon code ne fonctionne pas lorsque l'utilisateur clique sur le bouton envoyer, je reçois le message NaN à la place du résultat du montant total de la variable
S'il vous plaît pouvez-vous jeter un oeil à mon code et me dire ce que je fais mal
<script type="text/javascript">
function calc()
{
var total;
var fruitOrVeg;
var nrOfFruit;
course = document.getElementsByName("fruitOrVeg.course.value")
nrOfFruit = document.getElementsByName("nrOfFruit")
total = fruitOrVeg * nrOfFruit;
window.alert(total)
}
</script>
utilisation de la fonction eval. La fonction eval() évalue ou exécute un argument.
Ne pas utiliser la fonction eval. Eval est mauvais.
Pouvez-vous nous montrer ton code Html?
Ne pas utiliser la fonction eval. Eval est mauvais.
Pouvez-vous nous montrer ton code Html?
OriginalL'auteur Timothy Coetzee | 2013-04-18
Vous devez vous connecter pour publier un commentaire.
Vous prenez les valeurs comme des chaînes de caractères (plutôt que des chiffres), et vous n'étiez pas à l'aide de "fruitOrVeg". Aussi remarqué plus tard/les nouveaux commentaires) vous utilisez des noms lorsque vous devriez vraiment utiliser des ID pour les éléments que vous souhaitez javascript pour obtenir des données de manière directe et spécifique, et ensuite mettre à jour votre js en conséquence. Essayez ceci:
petite question dois-je définir la variable total en nombre aussi?
non, pas en javascript... le type de variable sera déterminée par la valeur qui lui est passé
Comment est-ce répondre de travail?
document.getElementsByName
retourne un tableau. Vous ne pouvez pas multiplier les tableaux. Et il n'a pas d'importance si elles sont des chaînes de caractères. Lorsque vous utilisez le*
de l'opérateur, les valeurs sont contraints de Nombres, de sorte que l'opération peut s'effectuerEn fait, je n'avais même pas remarqué que... il serait préférable de mettre des ID sur chaque chose que vous voulez obtenir les valeurs à partir. Et obtenir les valeurs par ID, si l'utilisation des intrants: avec jquery, vous pourriez faire
$("#nrOfFruit").val();
... ou avec régulièrement des js,document.getElementById('nrOfFruit').value
;OriginalL'auteur smerny
Le problème immédiat est que vous n'utilisiez pas le
fruitOrVeg
variable. Autres que que, la récupération des éléments de valeurs n'a pas de sens dans votre code. Essayez ceci:en supposant que votre HTML est comme:
DÉMO: http://jsfiddle.net/TNPCh/
Votre premier problème, c'est que vous n'avez pas réellement obtenir les éléments de valeurs. Vous devez le faire en utilisant
.value
à obtenir.Deuxième problème est que le résultat de
getElementsByName
est unHTMLCollection
(un tableau), de sorte que vous ne pouvez pas utiliser.value
sur elle. Si vous êtes sûr qu'il y a un seul élément avec ce nom, il suffit de l'indice de la matrice avec[0]
pour obtenir le premier trouvé. Une chose plus facile à faire est de donner les éléments de laid
de l'attribut et de l'utilisationdocument.getElementById
qui retourne un et un seul élément (pas un tableau). Je ne voulais pas supposer que vous étiez en mesure de le faire, donc mon code utilise encoregetElementsByName
.Enfin, la multiplication n'a pas besoin de conversion/l'analyse d'un certain nombre. Le
*
opérateur automatiquement convertit les valeurs en nombres ainsi la multiplication peut se produire. Donc, depuis qu'ils sont à l'origine des chaînes, l'opération sera exécutée en raison de cette contrainte (c'est pas le cas avec la+
opérateur). Bien sûr, si l'un des deux opérandes n'est pas un nombre, en premier lieu, la multiplication du résultat seraNaN
.OriginalL'auteur Ian
essayez d'utiliser
parseInt
pour toutes les valeurs.Vous n'avez pas une valeur pourfruitOrVeg
.Essayer de déclarer avec une valeur tout ce que vous voulezparseFloat
si elles ne sont pas des valeurs entières.je pense que pas de fruits signifie qu'il est de type int
on ne sait jamais...
J'ai ajouté parseInt comme vous l'avez dit mais j'ai toujours NaN dans la boîte d'alerte...
vous devez déclarer fruitOrVeg avec une valeur
OriginalL'auteur PSR