2012-01-04 1 views
2

У меня есть два файла jQuery: один из них [newForms_jQuery.js] вызывается в userNewItemForm и adminNewItemForm, а другой пользователь [editForms_jQuery.js] вызывается в userEditItemForm и adminEditItemForm.Логический оператор OR в операторе case JavaScript

Я хотел бы объединить эти два файла в один файл jQuery, и я хотел использовать оператор case.

я узнал, что синтаксис будет

switch(n) 
{ 
case 1: 
    execute code block 1 
    break; 
case 2: 
    execute code block 2 
    break; 
default: 
    code to be executed if n is different from case 1 and 2 
} 

Я получаю имя файла, чтобы дифференцировать КСТАТИ новые и редактировать формы, а затем сделать что-то, исходя из этого. Моя первая мысль была использовать логическое ИЛИ в моем случае, например:

case (url="userNewItemForm.aspx") || (url="adminNewItemForm.aspx"): 
//do something 
case (url="userEditItemForm.aspx") || (url="adminEditItemForm.aspx"): 
//do soemthing else 

Однако, я нашел https://stackoverflow.com/a/1806279/429694. Итак, я пересмотрел мой сценарий:

switch(url) 
{ 
case "userNewItemForm.aspx": //intentionally left blank to fall through 
case "adminNewItemForm.aspx": 
// do new record stuff 
break; 
case "userEditItemForm.aspx": //intentionally left blank to fall through 
case "adminEditItemForm.aspx": 
//do edit record stuff 
break; 
default: 
alert(url); 
} 

Это, казалось, работали, однако при дальнейшем тестировании, я обнаружил, что заявления случая, которые не имеют перерыв; не провалился, как я и ожидал. Любой совет?

UPDATE1: Следуя совету @ jbabey, я пересмотрел свой сценарий на следующее, что я решил решить мою проблему, однако это не совсем так. Кажется, когда я открываю url, который находится во второй части инструкции OR, он не забирает имя и вместо этого выполняет случай по умолчанию.

Вот мой текущий код

function getFileName() 
    { 
    url = document.location.href; //gets the full url. URL is global var after function called 
    url = url.substring(0, (url.indexOf("#") == -1) ? url.length : url.indexOf("#")); //this removes the anchor at the end, if there is one 
    url = url.substring(0, (url.indexOf("?") == -1) ? url.length : url.indexOf("?")); //this removes the query after the file name, if there is one 
    url = url.substring(url.lastIndexOf("/") + 1, url.length); //this removes everything before the last slash in the path 
    return url; //returns filename 
    } 
$(document).ready(function(){ 
    getFileName(); 
    switch (url) 
    { 
      case ("eacrfNew_jQuery.aspx" || "newItem_jQuery.aspx"): 
       // do new record stuff 
      break; 
      case ("eacrfEdit_jQuery.aspx" || "editItem_jQuery.aspx"): 
       //do edit record stuff 
      break; //close edit record stuff 
      default: 
       // which file did it open?  
       alert(url); 
    } 
    }); // close doc.ready 

FINAL UPDATE:

Вы не можете использовать логические операторы В случае ЗАЯВЛЕНИЙ Вместо этого, вы должны использовать, если ... остальное См http://www.naveen.com.au/javascript/jquery/switch-case-in-jquery/319 подробности.

function getFileName() 
{ 
url = document.location.href; //gets the full url into global var 
return url; //returns filename 
} 

function clearID() 
{ 
//clears field values 
} 

$(window).load(function(){ 
    $(document).ready(function(){ 
    getFileName(); 
    if ((url === "eacrfNew_jQuery.aspx") || (url === "newItem_jQuery.aspx")) { 
     // do new record stuff 
    } else if ((url === "eacrfEdit_jQuery.aspx") || (url === "editItem_jQuery.aspx")) { 
     // do edit record stuff 
    } else { 
     /// default: which file did it open? 
     alert(url); 
    } 
    }); // close doc.ready 
}); // close window.load 
+0

Что сделал вы ожидаете. Что случилось? – Neal

+0

@Neal: Я ожидал, был ли URL-адрес userNewItemForm, что он выполнит «новые записи» ниже adminNewItemForm – jg100309

ответ

6

Вот почему я окружаю {}

switch(url) 
{ 
    case "userNewItemForm.aspx": 
    case "adminNewItemForm.aspx": 
    { 
     // do new record stuff 
     break; 
    } 
    case "userEditItemForm.aspx": 
    case "adminEditItemForm.aspx": 
    { 
     // do edit record stuff 
     break; 
    } 
} 

Но нет нет причин, почему ваш текущий код не должен работать.

0

у вас должен быть перерыв, чтобы получить поток управления, который вы ожидаете каждый раз.

провал без перерыва следует за дизайном ECMA.

см here для получения более подробной информации

0

Вместо того, чтобы использовать случаи каскадные, он может иметь больше смысла, чтобы оценить ваши дела, как булевы:

switch (true) { 
    case (bool1 && bool2): 
     alert('case 1'); 
     break; 
    case (bool1 || bool2): 
     alert('case 2'); 
     break; 
    default: 
     alert('default'); 
} 

Смотрите пример здесь: http://jsfiddle.net/Z7SDY/1/

+0

Я не уверен, как ваша скрипка отличается от моего третьего примера, за исключением того, что вы просто объявляете переменные, а вы перерыв; после каждого заявления. Если я что-то упустил, пожалуйста, дайте мне знать. – jg100309

+0

он функционально эквивалентен вашему третьему примеру, но в моем примере вы оцениваете свои логические выражения в аргументе case, а не используете каскадные случаи. – jbabey

+0

см. UPDATE1 ИЛИ не работает – jg100309

 Смежные вопросы

  • Нет связанных вопросов^_^