2010-07-20 6 views
0

J'ai une case à cocher avec des valeurs "nouvelle" ou "existante" société.javascript if - else le raccourci ne fonctionne pas?

$("input[name=company]:checked").val() 

avec jQuery me montre la valeur de la case cochée.
si je fais:

if ($("input[name=company]:checked").val() == "new") { 
    is_new_company = true; 
} else { 
    is_new_company = false; 
} 
alert(is_new_company); 

je reçois les booléens corrects.
le raccourci Doing:

($("input[name=company]:checked").val() == "new") ? is_new_company = true : is_new_company = false; 

Je ne reçois rien .. Pourquoi est-ce?

+3

ne devez-vous faire juste 'is_new_company = ($ (" entrée [nom = compagnie]: cochée "). val() ==" nouveau ")'? Je ne suis même pas sûr de ce qui se passe quand vous mettez des missions dans une opération ternaire comme ça –

+1

Cela m'inquiète que plusieurs personnes aient maintenant écrit une expression booléenne? vrai: faux »- à quoi ça sert? –

+0

Vous ne savez pas pourquoi cela se produit, mais comme d'autres l'ont suggéré, n'utilisez pas l'opérateur ternaire pour écrire des instructions: écrivez uniquement des expressions avec lui (c'est-à-dire la partie dans une instruction droite de l'opérateur d'affectation '='). Dans d'autres langages tels que Java, cela ne sera pas compilé du tout. – FK82

Répondre

4

Pourquoi faites-vous tout simplement pas:

is_new_company = $("input[name=company]:checked").val() == "new"; 

J'ai essayé votre code sur la console Firebug et il fonctionne très bien: (input[name=q] est la zone de recherche à la dans le coin supérieur droit de cette page)

var x; 
$("input[name=q]").val() == "asd" ? x = "t r u e" : x = "f a l s e"; 
console.log(x);//worked as expected 

D'ailleurs, je considère ce qui suit pour être plus lisible (je ne l'utilise que pour les valeurs non booléennes, bien sûr):

x = $("input[name=q]").val() == "asd" ? "t r u e" : "f a l s e"; 
0

Essayez

is_new_company = ($("input[name=company]:checked").val() == "new") ? true : false; 
+2

-1: 'condition? true: false' est redondant et devrait simplement être remplacé par 'condition'. – Amber

+0

@Abber Downvotes semble un peu dur; les réponses sont justes, juste (légèrement) inutilement verbeuses –

+0

@Michael: Cela ne me dérange pas de supprimer des downvotes si quelqu'un répond à un commentaire indiquant qu'il a corrigé la redondance, mais je vais d'abord reduire le code redondant parce que le code redondant est pauvre code. – Amber

0
is_new_company = ($("input[name='company']:checked").val() == "new") ? true : false; 
+1

-1: 'condition? true: false' est redondant et devrait simplement être remplacé par 'condition'. – Amber

+0

@Amber, ans est correct. S'il vous plaît downvote après le test. – Sadat

+1

Je sais qu'il fonctionne correctement, ce n'était pas la raison pour downvoting. Le downvote était dû à un mauvais style. – Amber