2012-01-04 81 views
2

我有兩個jQuery文件 - 在userNewItemForm和adminNewItemForm上調用一個[newForms_jQuery.js],在userEditItemForm和adminEditItemForm上調用另一個[editForms_jQuery.js]。JavaScript案例語句中的邏輯OR運算符

我想將這兩個文件合併成一個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 
} 

我收到文件的名稱來區分BTW新建和編輯表單,然後做基礎的東西。我首先想到的是使用邏輯或在我的情況,如:

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); 
} 

這似乎工作,但是在進一步的測試,我發現,case語句沒有休息;沒有像我預料的那樣下降。有什麼建議?

UPDATE1: 按照@ jbabey的建議,我將腳本修改爲以下內容,但我認爲它解決了我的問題,但它並不完全。看起來,當我打開OR語句的第二部分中的url時,它不會選取名稱,而是執行默認情況。

這裏是我當前的代碼

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 

最後更新:

你不能用邏輯運算符case語句相反,你必須IF ... ELSE詳見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 2012-01-04 19:13:30

+0

@Neal:我期待如果URL是userNewItemForm,它會執行下面的「新記錄的東西」adminNewItemForm – jg100309 2012-01-04 19:22:26

回答

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 2012-01-04 19:44:19

+0

它在功能上與您的第三個示例等效,但在我的示例中,您在case語句中評估布爾值,而不是使用級聯案例 – jbabey 2012-01-04 19:49:24

+0

請參閱UPDATE1或首先不工作 – jg100309 2012-01-05 15:27:42