我有两个jQuery文件 - 在userNewItemForm和adminNewItemForm上调用一个[newForms_jQuery.js],在userEditItemForm和adminEditItemForm上调用另一个[editForms_jQuery.js]。
我想将这两个文件合并到一个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 New和Edit表单,然后根据它做一些事情。我的第一个想法是在我的情况下使用逻辑OR,例如:
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的建议,我将我的脚本修改为以下内容,我认为这解决了我的问题,但并不完全如此。当我打开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
最终更新:
您不能在案例陈述中使用逻辑运算符相反,您必须使用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 :(得分:9)
这就是我用{}
switch(url)
{
case "userNewItemForm.aspx":
case "adminNewItemForm.aspx":
{
// do new record stuff
break;
}
case "userEditItemForm.aspx":
case "adminEditItemForm.aspx":
{
// do edit record stuff
break;
}
}
但没有原因导致您当前的代码不起作用。
答案 1 :(得分:1)
而不是使用级联案例,将您的案例评估为布尔值可能更有意义:
switch (true) {
case (bool1 && bool2):
alert('case 1');
break;
case (bool1 || bool2):
alert('case 2');
break;
default:
alert('default');
}
请参阅此处的示例:http://jsfiddle.net/Z7SDY/1/
答案 2 :(得分:0)
你必须有休息时间才能获得你期望的控制流程。
ECMA设计遵循不间断的下降。有关详细信息,请参阅here