2011-03-22 24 views
6

No puedo usar else en mi script; ¿Cómo puedo implementar una declaración if else sin usar else?Cómo escribir una instrucción IF else sin 'else'

Estoy tratando de cambiar el tamaño de un div:

function hideTable(){ 
    var table = document.getElementById('PDemo'); 
    if(table.style.width == "50%") table.style.width = "150px"; 
    if(table.style.width == "150px") table.style.width = "50%"; 
} 

Este script no funciona porque tan pronto como se ejecuta la primera if comunicado, la condición para la segunda if declaración llega a ser verdad, por lo que se ejecuta también, así nada cambia.

P.S. Esto no es una tarea. El software que estoy usando solo permite declaraciones de 1 línea.

+26

Obtenga el nuevo software de inmediato. – alex

+1

Lo que dice @alex. :) Aparte de eso, 'else if' debería funcionar –

+2

¿Qué diablos estás usando? –

Respuesta

8

Si no puede usar un else (y es loco), utilice un switch.

switch (table.style.width) { 

    case '50%': 
     ... 
     break; 

    case '150px': 
     ... 
     break; 

} 
+2

¿Un voto a favor? De Verdad? – alex

+0

No lo sé, tampoco parece que encaje en una línea. :-) –

+0

@Dave True, pero fue aceptado :) Además, el ejemplo del código que el OP dio no cabe tampoco en una línea. – alex

21

El operador ternario:

condition ? execTrue() : execFalse(); 

Esto es equivalente a:

if (condition) { 
    execTrue(); 
} 
else { 
    execFalse(); 
} 

Usted puede escribir un if/else en la línea 1, sólo que no presione intro ...

if (condition) { execTrue(); } else { execFalse(); } 

Además, puede escribir cualquier declaración de complejidad arbitraria en una línea:

if(condition1) { exec1(); } else if(condition2) { exec2(); } else { execFalse() } 

EDIT: tengo que preguntar: wtf tipo de software horrible, sólo se le permite escribir las declaraciones de una sola línea? ¿Es esto alguna forma de tortura? Esto suena absolutamente miserable

EDIT 2: Si usted está teniendo el problema por el que la segunda sentencia if se ejecuta también, que quieren imponer la exclusión mutua, es decir, utilizando else if en lugar de sólo if en cada subsecuente condicional

-tjw

+0

jaja. es un software de informes. no es una alternativa para el eclipse ni nada. parece que no le gustan esos elses. gracias de todos modos – code511788465541441

+0

hmm, ¿así que estás escribiendo estos comandos como una consola de una línea o algo así? Ya veo. Bueno, si no le "gusta" lo demás, el operador ternario es su solución. –

7
if(/*condition a*/){/*statements a*/}else if(/*condition b*/){/*statements b*/}else{/*statements c/*} 

una sola línea.

10

Guarde el valor en una variable diferente.

function hideTable(){ 
    var table = document.getElementById('PDemo'); 
    var width = table.style.width; 
    if(width == "50%") table.style.width = "150px"; 
    if(width == "150px") table.style.width = "50%"; 
} 
0

con un ciclo while en aras de la exclusividad.

while (!resized){ 
    if(width == "50%") {table.style.width = "150px";resized=true;break}; 
    if(width == "150px") table.style.width = "50%";resized=true;break}; 
    resized=true; 
} 

¿Cuál es el software que está utilizando?

+1

Prefiero el 'do {// Stuff} mientras que (0);' idiom better. – Lalaland

0

Con & & operador se llaman operador de cortocircuito. Devolverá el valor del segundo operando basado en el valor del primer operando.

Por ejemplo: (explicación: Si 'perfil' permiso existir en permArray entonces perfil de carga de usuario)

isPermitted(permArray,'profile') && loadProfile(); 

El operador & & es útil también para la comprobación de objetos nulos antes de acceder a sus atributos. Por ejemplo ...

var name = person && person.getName();