Opérateur logique OU dans un JavaScript cas de déclaration
J'ai deux fichiers jQuery - one [newForms_jQuery.js] d'être appelé userNewItemForm et adminNewItemForm, un autre [editForms_jQuery.js] d'être appelé userEditItemForm et adminEditItemForm.
J'aimerais combiner ces deux fichiers en un seul fichier jQuery et j'ai voulu utiliser une instruction case.
J'ai trouvé que la syntaxe serait
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
}
Je reçois le nom du fichier à différencier de la tva Nouvelles et de Modifier les formes et ensuite de faire quelque chose sur cette base. Ma première pensée a été d'utiliser la logique OU dans mon cas, tels que:
case (url="userNewItemForm.aspx") || (url="adminNewItemForm.aspx"):
//do something
case (url="userEditItemForm.aspx") || (url="adminEditItemForm.aspx"):
//do soemthing else
Cependant, alors j'ai trouvé https://stackoverflow.com/a/1806279/429694. Donc, j'ai révisé mon script:
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);
}
Cela semblait fonctionner, cependant, sur d'autres tests, j'ai trouvé que le cas des états qui n'ont pas de pause; ne tombent pas à travers comme je l'avais prévu. Des conseils?
UPDATE1:
Suivant @jbabey les conseils, j'ai révisé mon script pour la suite, j'ai pensé que c'résolu mon problème, cependant, il n'est pas tout à fait. Il semble que lorsque j'ouvre l'url qui est dans la 2ème partie de l'instruction OU, il ne ramasse pas le nom, et exécute le cas par défaut à la place.
Voici mon code actuel
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
DERNIÈRE MISE À JOUR:
VOUS NE pouvez pas UTILISER les OPÉRATEURS LOGIQUES DANS l'AFFAIRE ÉTATS au Lieu de cela, vous devez utiliser des if...else Voir http://www.naveen.com.au/javascript/jquery/switch-case-in-jquery/319 pour plus de détails.
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
- Qu'avez-vous vous attendez. Ce qui s'est passé?
- Je m'attendais si l'URL a été userNewItemForm, qu'il exécute le "nouveau record trucs" ci-dessous adminNewItemForm
Vous devez vous connecter pour publier un commentaire.
C'est pourquoi je surround avec
{}
Mais il est pas raison pour laquelle votre code actuel ne devrait pas travailler.
Au lieu d'utiliser la cascade cas, il pourrait faire plus de sens pour évaluer votre cas comme des booléens:
Voir exemple ici: http://jsfiddle.net/Z7SDY/1/
vous devez avoir la pause pour obtenir le contrôle de flux que vous vous attendez à chaque fois.
la chute de la grâce, sans pause suit l'ECMA conception.
voir ici pour des informations plus détaillées