2011-06-25 12 views
12

robię instrukcji switch w javascript:stosując operator OR w javascript przełącznik oświadczenie

switch($tp_type){ 

    case 'ITP': 
    $('#indv_tp_id').val(data); 
    break; 

    case 'CRP'||'COO'||'FOU': 
    $('#jurd_tp_id').val(data); 
    break; 

} 

Ale myślę, że to nie działa, jeśli mogę użyć lub operatora. Jak prawidłowo to zrobić w javascript? Jeśli wybiorę ITP, otrzymam ITP. Ale jeśli wybiorę COO, FOU LUB CRP, zawsze otrzymuję pierwszą, czyli CRP. Proszę, dziękuję!

+1

Zobacz także [JavaScript lub wyrażenie w przypadku przełącznika] (http://stackoverflow.com/questions/6513585/javascript-orpress-input-in-a-switch-case). –

Odpowiedz

51

Należy ponownie napisać to tak:

case 'CRP': 
case 'COO': 
case 'FOU': 
    $('#jurd_tp_id').val(data); 
    break; 

Widać to udokumentowane w odniesieniu switch. Zachowanie kolejnych case sprawozdania bez break s pomiędzy (zwany „fall-through”) jest tam opisane:

Opcjonalny oświadczenie przerwa związana z każdej etykiecie case zapewnia, że ​​przerwy programu spośród przełącznika raz dopasowanej rachunku jest wykonywane i kontynuuje wykonywanie zgodnie z instrukcją po przełączeniu. Jeśli pominięto przerwę, program kontynuuje wykonywanie z następną instrukcją w instrukcji switch.

Jak, dlaczego wersja działa tylko na pierwszej pozycji (CRP), to po prostu dlatego, że wyrażenie 'CRP'||'COO'||'FOU' ocenia się 'CRP' (od niepuste ciągi do true oceniać w kontekście logicznym). Tak więc oświadczenie case jest równoważne tylko case 'CRP': raz ocenione.

+6

To się nazywa "fall-through": http://en.wikipedia.org/wiki/Switch_case. Umieszczenie każdego "przypadku" na osobnej linii ułatwia odczytanie IMO. –