2010-03-03 2 views
2

window.location.href redirige le navigateur vers stackoverflow.com lorsque le bouton est cliqué, mais ne le fait pas lorsque l'on appuie sur "Entrée" dans le champ de saisie , malgré les deux écouteurs d'événements utilisant la même fonction visitStack. Si cela vous aide, changer les balises de forme en tags div en quelque sorte le fait fonctionner, mais ce n'est pas sémantique, bien sûr. En changeant "keydown" dans la dernière ligne à "clic", et en déplaçant immédiatement visitStack (e) dans keyDownTextField (e), faites-le fonctionner aussi. Donc, les balises keydown et/ou de forme semblent être les coupables ici, mais je ne suis pas sûr.Javascript: window.location.href ne redirige pas lors de l'appel de la fonction au sein d'une fonction

<form> 
<input id="iamtext" type="text" /> 
<input id="gobutton" type="button" value="Overflow" />    
</form> 


<script type="text/javascript"> 
    document.getElementById("gobutton").addEventListener("click", visitStack, false); 

    function visitStack(e) { 
     e.stopPropagation();     
     window.location.href = "http://www.stackoverflow.com"; 
    } 

    function keyDownTextField(e) { 
     var keyCode = e.keyCode; 
     if(keyCode==13) { 
      alert("Entered!"); 
      visitStack(e); 
     } 
    } 

    document.getElementById("iamtext").addEventListener("keydown", keyDownTextField, false); 
</script> 
+1

ne devrait-il pas être document.location.href? – artemb

+0

J'utilise toujours juste "window.location = newURL;" voir: https://developer.mozilla.org/En/DOM/Window.location – Laimoncijus

+0

@artemb Les deux fonctionnent dans Firefox lorsqu'ils sont testés avec la console Firebug. 'console.log (window.location === document.location);' prints 'true' – Amarghosh

Répondre

1

Frapper ENTER dans un champ de saisie de texte dans un formulaire HTML a plutôt different effects sur différents navigateurs.

Dans votre cas, je suppose que le formulaire est soumis en appuyant sur ENTRÉE. Puisque vous n'avez pas spécifié de action, le formulaire est soumis à la même page pour un rechargement.

+0

Donc ce n'est probablement pas une condition de course? – chimerical

0

Vous pouvez également essayer d'ajouter e.preventDefault() ainsi que e.stopPropagation() à visitStack().

Questions connexes