0 votes

Est-il vraiment impossible d'ajouter des actions à cette déclaration if raccourcie en js ?

(category=="Villor/Radhus mm")?byId("nav_sub_villor").style.display='block' :  byId("nav_sub_villor").style.display='none';

Je voudrais appeler une fonction si l'énoncé ci-dessus est vrai...

Mais ça ne semble pas possible...

Je veux juste être sûr que ce n'est pas possible, quelqu'un le sait-il ?

3voto

Yuval Adam Points 59423

Bien sûr que vous pouvez :

function doIfTrue()
{
    byId("nav_sub_villor").style.display='block';
    // call other function
}

function doIfFalse()
{
    byId("nav_sub_villor").style.display='none';
}

(category=="Villor/Radhus mm") ? doIfTrue() : doIfFalse();

Notez qu'une expression comme condition ? statement; statement : statement; est illégal en JS.

Toutefois, si vous voulez vraiment que votre projet reste une ligne unique, vous pouvez le placer dans une fonction anonyme :

(category=="Villor/Radhus mm") ? function() { byId("nav_sub_villor").style.display='block'; doOtherStuff();}() :  byId("nav_sub_villor").style.display='none';

1voto

naivists Points 15639

C'est possible. Vous pouvez envelopper votre code dans une fonction anonyme et l'appeler immédiatement. Par exemple, celui-ci alerte d'abord I'm in a function et ensuite des alertes 1

var i=1;
var a =  (i==1) ? (function(){alert("I'm in a function"); return 1})() : (function(){return 2})();
alert(a);

EDIT : Désolé, ceci est nommé fonction d'auto-invitation, voir ici : http://www.hunlock.com/blogs/Functional_Javascript

0voto

Ryan Joy Points 781

Vous pouvez avoir plusieurs déclarations ou appels de fonction dans cette déclaration ternaire. Pour appeler une autre fonction si elle est vraie, il suffit de l'ajouter avant ou après la première section où vous définissez l'affichage sur "block".

0voto

Plutor Points 1926

Pourquoi voudriez-vous raccourcir une instruction if de cette manière ? Vous allez juste donner des maux de tête à la prochaine personne qui viendra l'entretenir.

if (category=="Villor/Radhus mm")
    byId("nav_sub_villor").style.display='block';
else
    byId("nav_sub_villor").style.display='none';

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X