2011-01-27 6 views
2

Je suis nouveau à la javascript window.location et j'essayais de l'utiliser pour diriger vers certaines pages lorsque certaines phrases sont entrées dans une boîte d'invite. Est-ce que la façon dont je l'ai fait ci-dessous est correcte? Pour une raison quelconque, cela ne semble pas fonctionner.Comment fonctionne javascript window.location?

<html> 
<head> 
<script> 
function desiredPg() { 
    var pgDesired = prompt("What do you want?"); 
    if (pgDesired == "Log In" || "log in") { 
     window.location = "google.com"; 
    } else if (pgDesired == "Register" || "register") { 
     window.location = "apple.com"; 
    } else { 
     alert("Please enter a valid page name. Do not forget to use appropriate spaces and capitalize if necessary"); 
    } 
} 
</script> 

</head> 
<body onLoad="desiredPg()"> 
+2

appelez-vous la fonction du tout? – kjy112

+0

Cela me semble juste ... 'window.location' redirige le navigateur vers ce que vous lui dites. – JCOC611

+0

ouais, je l'appelle sur la charge du corps. J'ai vérifié cela a fonctionné avant que j'aie ajouté l'instruction if, mais je posterai le reste juste au cas – chromedude

Répondre

4

Vous devez utiliser URL absolues si vous voulez aller à un autre hôte, alors ajoutez simplement http:// à la chaîne.

Convertissez la chaîne en minuscules de sorte que vous n'effectuiez qu'une seule comparaison.

Je vous suggère d'utiliser un hachage, ce nettoie le code une tonne et ne nécessite qu'une seule if état:

function desiredPg() { 
    var pgDesired = prompt("What do you want?"); 
    var sites = {'log in': 'http://google.com', 'register':'http://apple.com'}; 

    if (typeof sites[pgDesired.toLowerCase()] !== 'undefined') { 
    window.location = sites[pgDesired.toLowerCase()]; 
    } else { 
    alert("Please enter a valid page name."); 
    } 
} 
2

Si vous définissez window.location sur un chemin comme « apple.com », le chemin est considéré comme un relatif chemin, cela signifie que si vous êtes en train de consulter Google, il va chercher 'google.com/path'.

Essayez le chemin absolu à la place, y compris le protocole ..

window.location = "http://apple.com"; 
0

Mettant de côté si elle est une bonne idée pour que les utilisateurs se souviennent des noms de page, il y a deux problèmes dans le code.

Tout d'abord, vous devez évaluer chaque condition dans une instruction if séparément, de sorte que ceux serait comme pgDesired=="A" || pgDesired=="B" (bien que la solution de Jacob est plus robuste)

Deuxièmement, vous devez utiliser le chemin tout à fait comme ring0 mentionné. Alors window.location = "http://apple.com";

+0

ouais, je sais que faire en sorte que les utilisateurs se souviennent des noms de pages est un problème en général mais dans ce cas c'est plutôt pour empêcher les gens de trouver les pages. – chromedude

0

Un plus pinailler: La façon « standard » de le faire est par la propriété href de window.location:

window.location.href = "http://www.example.com/"; 

Si vous voulez garder l'emplacement actuel de l'histoire du navigateur, utilisez replace():

window.location.replace("http://www.example.com/"); 
Questions connexes