2012-12-19 18 views
5

Co jest nie tak z tym warunkiem IF? Po nadaniu wartości EEID jako 123456 nie powinien wchodzić w ten stan. Ale widzę, że to nadchodzi. Czy ktoś może mi powiedzieć, co robię źle?co jest nie tak z tym warunkiem w JavaScript?

if ((EEID.value.length != 6) || (EEID.value.length != 11)) { 
     alert(EEID.value.length); //This shows that the value length = 6 
     alert("Your Member ID must be a 6 digit or 11 digit number."); 
     EEID.focus(); 
     return false; 
     } 
+4

obsłudze i zamiast lub. 'EEID.value.length! = 11' to" true "dla' 123456', a 'false OR true' to' true'. –

+0

Ale długość wartości może wynosić 6 lub 11. – Ditty

+5

To zawsze przejdzie. Zasadniczo pytasz, czy długość nie wynosi 6 i 11 w tym samym czasie. – climbage

Odpowiedz

11

Warunek jest spełniony, ponieważ nie jest EEID.value.length 11. lub (||) pozwala albo! = 6 lub! = 11 zadowolić jeśli warunek.

trzeba zmienić lub (||) do AND (& &) jako takie:

if ((EEID.value.length != 6) && (EEID.value.length != 11)) { 
    alert(EEID.value.length); 
    alert("Your Member ID must be a 6 digit or 11 digit number."); 
    EEID.focus(); 
    return false; 
} 

W ten sposób, jeśli warunek jest spełniony tylko wtedy, gdy nie jest EEID.value.length 6 i nie 11.

+1

Dziękuję za usunięcie tego bezsensownego komentarza, jaki miał. Nie jestem pewien, co to było. Bardzo dobra odpowiedź. +1 – War10ck

+1

@ Fls'Zen - Dziękuję. To działa. – Ditty

1

To, co pierwotnie miałeś, (!P || !Q), cały czas zwraca true, ponieważ EEID.value.length nie może jednocześnie być jednocześnie 6 i 11. Kiedy ktoś jest fałszywy, drugi jest prawdziwy i na odwrót, a więc zawsze jest prawdą.

Spójrz na De Morgan's laws, lub bardziej precyzyjnie, że

(!P && !Q) == !(P || Q) 

który jest podobny do tego, co masz, ale stwierdza, że ​​warunek jest spełniony, jeżeli EEID.value.length jest ani 6lub11. (Uwaga że wolałbym prawą stronę, jak to tylko neguje raz). Tak więc, w zasadzie można napisać swoje warunki jak

if ((EEID.value.length != 6) && (EEID.value.length != 11)) { 

lub

if (!(EEID.value.length == 6 || EEID.value.length == 11)) { 
+2

+1, ostatnia instrukcja if najlepiej reprezentuje zdanie "jeśli EEID.value.length nie ma 6 lub 11" i powinno być użyte. – jbabey