2012-01-04 86 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