Je souhaite afficher l'état d'un utilisateur comme "actif: oui". Je ne sais pas comment écrire l'instruction if else. J'ai essayé de l'écrire moi-même, mais il affiche toujours "active: 1". J'ai essayé de faire une déclaration if else moi-même, mais cela ne fonctionne pas.
<script> let jUser = { "name":"A", "lastName":"B", "active": 1 } $('#lblName').text(jUser.name) $('#lblLastName').text(jUser.lastName) //if else statement here: if ('active' == '1') { $('#lblActive').text("yes") } else if ('active' == '0') { $('#lblActive').text("yes") } $('#lblActive').text(jUser.active) $('.navlink').click( function(){ $('.navlink').removeClass('active') $('.page').hide() $(this).addClass('active') let sPageToShow = $(this).attr('data-showPage') $('#'+sPageToShow).show() }) </script>
Pour le moment, la sortie est celle que j'écris, mais je veux l'afficher par oui ou par non.
Merci
3 Réponses :
Il y a quelques problèmes ici:
active
et 1
, et non la valeur contenue dans les variables active
est une propriété de jUser
donc il devrait être jUser.active
jUser.active
contient un entier, pas une chaîne. Bien qu'une comparaison implicite fonctionne, il est préférable de comparer les mêmes types. text ()
dans la dernière instruction afin que le if
soit redondant if
font la même chose Notez également que si active
n'a que deux états possibles (vraisemblablement 1
ou 0
dans votre exemple) alors il Cela a plus de sens qu'il s'agisse d'une valeur booléenne true
/ false
.
Avec tout cela à l'esprit, vous pouvez atteindre votre objectif avec une simple expression ternaire :
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> Active: <label id="lblActive"></label>
let jUser = { "name": "A", "lastName": "B", "active": 1 } $('#lblActive').text(jUser.active === 1 ? 'Yes' : 'No'); /* // the same logic in a full 'if' condition: if (jUser.active === 1) { $('#lblActive').text('Yes'); } else { $('#lblActive').text('No'); } */
Merci - Je suis nouveau dans ce domaine donc j'essaie de comprendre la logique. Cela aide beaucoup avec l'explication. Et il fonctionne!
Aucun problème. N'oubliez pas d'accepter une réponse si cela vous a aidé.
Je l'ai fait, mais j'ai eu ce commentaire: "Les votes exprimés par ceux qui ont moins de 15 points de réputation sont enregistrés, mais ne modifiez pas le score affiché publiquement"
Vous ne pouvez pas accéder à la variable en la mettant entre guillemets ''
. Et active
est à l'intérieur de jUser
, vous devez y accéder en utilisant jUser.active
ou jUser ["active"]. Et supprimez $ ('# lblActive'). Text (jUser.active)
après vos blocs if
if (jUser.active === 1) { $('#lblActive').text("yes") } if (jUser.active === 0) { $('#lblActive').text("no") }
Vous compariez une chaîne à un nombre, ce qui ne ferait jamais rien. Vous devez comparer la propriété active
de l'objet jUser
au nombre 1
, puis définir un texte d'affichage "oui" ou "non "
let jUser = { "name":"A", "lastName":"B", "active": 1 } $('#lblName').text(jUser.name) $('#lblLastName').text(jUser.lastName) let activeStatus = jUser.active === 1 ? "yes" : "no"; $('#lblActive').text(activeStatus); $('.navlink').click( function(){ $('.navlink').removeClass('active') $('.page').hide() $(this).addClass('active') let sPageToShow = $(this).attr('data-showPage') $('#'+sPageToShow).show() })
vous comparez une chaîne (active) à une chaîne numérique (1/0) - cela ne remplira jamais le conditionnel. Vous devez réellement obtenir la valeur active - ne pas utiliser de chaîne
Tout d'abord, vous comparez des chaînes, pas la valeur des variables. Deuxièmement, les deux côtés de votre condition
if
(si cela a fonctionné) font la même chose ...Et quel est le problème avec l'écriture de
jUser.active == 1
dans le if? Et la chose correspondante dans leelse if
?if (jUser.active === 1 || jUser.active === 0)