2015-05-12 3 views
-4

У меня есть эта функция, но я не знаю, будет ли «переключатель» лучше?IF statement doenst work

(function ($) { 
    var doc = $.urlParam('doc'); 
    if (doc) { 
     if (doc = 'new') { 
      alert(doc); 
     } 
     if (doc = 'new2') { 
      alert(doc); 
     } 
     if (doc = 'new3') { 
      alert(doc); 
     } 
    } 
})(jQuery); 

Предупреждение должно появляться только в том случае, если параметр в URL-адресе является правильным, как в инструкции IF.

Полный код можно найти здесь: https://jsfiddle.net/yc5f9ct7/4/

+4

Во-первых, используйте '==' для проверки равенства. Во-вторых, учитывая, что все три условия выполняют одну и ту же логику, в чем смысл выражения 'if' в первую очередь? –

+4

Используйте '==' или '===' вместо '=', помните '=' - оператор присваивания – Satpal

+1

Также обратите внимание: он * выглядит *, как ваш код хочет обернуть эту последнюю часть в DOM-готовом обработчике, но вы обертывая его в IIFE. Измените оболочку только на это: 'jQuery (function ($) {YOUR CODE});' Этот ярлык обеспечивает DOM-готовый и локально ограниченный '$' –

ответ

0

Как все отметили, вы используете назначение = вместо от сравнения == или точное сравнение ===.

Это в стороне, если вы тестируете одну переменную для нескольких значений, и намерены иметь различный код на каждый, то коммутатор более логично:

var doc = $.urlParam('doc'); 
switch (doc){ 
    case 'new': 
     alert(doc); 
     break; 
    case 'new2': 
     alert(doc); 
     break; 
    case 'new3': 
     alert(doc); 
     break; 
} 

Также обратите внимание: это выглядит как код хочет также обернуть эту последнюю часть в обработчике DOM, но вместо этого вы оберните его в IIFE. Измените обертку на jQuery(function($){ YOUR CODE HERE });

например.

jQuery(function($){ 
    var doc = $.urlParam('doc'); 
    switch (doc){ 
     case 'new': 
      alert(doc); 
      break; 
     case 'new2': 
      alert(doc); 
      break; 
     case 'new3': 
      alert(doc); 
      break; 
    } 
}); 

Этот удобный ярлык для DOM готов, обеспечивает локальную область $.

2

Вы должны использовать == вместо = проверить равенство в случае утверждения:

(function ($) { 

var doc = $.urlParam('doc'); 


if (doc) { 
     if (doc == 'new') { 
      alert(doc); 

     } 
     if (doc == 'new2') { 
      alert(doc); 

     } 
     if (doc == 'new3') { 
      alert(doc); 

     } 
    } 

})(jQuery); 
+0

Спасибо, вчера было немного поздно :) – fr3d

+1

Это выглядит с JSFiddle, как будто они тоже имели * DOM готовый обработчик *, но вместо этого используют IIFE. –

1

Как уже упоминалось, двойные РАВНО требуется, но вы можете также сократить это:

(function ($) { 
    var doc = $.urlParam('doc'); 
    if (doc) { 
     if (doc == 'new' || doc == 'new2' || doc == 'new3') { 
      alert(doc); 
     } 
    } 
})(jQuery); 
+3

Может быть укорочен до 'if (doc && (doc == 'new' || doc == 'new2' || doc == 'new3')) {' ... –