2010-10-09 7 views
0

Let'u commencer par exemple suivant:balise d'ancrage HTML Comprendre

Créer trois pages dans le même répertoire: test.html index.html

Votre test.html:

<html> 
<head> 
    <script> 
    function test() 
    { 
    alert('Going to google.com?'); 
    window.location="http://google.com"; 
    } 
    </script> 
</head> 
<body> 
    <a href='' onclick="test();">google.com</a><br/> 
    <input type="button" value="google" onclick="test();" /> 
    <a href='' onmouseover="test();">google.com</a><br/> 
</body> 
</html> 

Maintenant, vérifiez la page test.html sur IE ainsi que firefox ou crome.

Vous remarquerez les points suivants:

  1. bouton fonctionne parfaitement.
  2. Le premier lien hypertexte fonctionne différemment dans IE et un autre navigateur. Dans IE, cela nous ramène à la page index.html, alors que dans Firefox, il reste sur la même page.
  3. Pour le premier lien hypertexte, window.location échoue.
  4. Deuxième lien hypertexte que vous ne pouvez pas cliquer dessus, car l'événement survolez le premier, et cela fonctionne parfaitement!

Pourquoi?

Mon intérêt majeur est sur le 3ème point, car il nous donne même alerte, window.location échoue.

Répondre

1

Essayez ceci:

<html> 
<head> 
    <script> 
    function test() 
    { 
    alert('Going to google.com?'); 
    window.location="http://google.com"; 
    return false; 
    } 
    </script> 
</head> 
<body> 
    <a href='' onclick="Javascript:return test();">google.com</a><br/> 
    <input type="button" value="google" onclick="Javascript:return test();" /> 
    <a href='' onmouseover="Javascript:return test();">google.com</a><br/> 
</body> 
</html> 
+0

Pourquoi avez-vous des étiquettes avant vos déclarations de retour? https://developer.mozilla.org/fr/JavaScript/Reference/Statements/label – Quentin

+0

Si je mets 'alert()' après le 'window.location', alors' alert() 'sera appelé en premier, puis redirigera nous à notre emplacement pourquoi? – Vikas

+0

en fait, je ne suis pas expérimenté dans js pour vous dire pourquoi l'alerte vient avant la redirection. pour moi, il semble que la redirection est déclenchée sur le changement de la propriété location de l'objet window et que l'événement est placé sur une pile et en cours de traitement après l'événement click qui est en cours de traitement dans votre méthode test() – ITroubs

3

L'événement se déclenche JavaScript, window.location est défini, l'action par défaut des feux de lien et le navigateur va à « » qui (IIRC) résout comme l'URI en cours.

C'est le même effet que vous obtenez si vous cliquez sur un lien, puis cliquez rapidement sur un autre lien. Le navigateur n'a pas le temps d'aller à la première avant de recevoir l'instruction d'aller à la seconde, et il va à la seconde. Si vous retardez le retour de la fonction (en mettant l'alerte en second), cela donne assez de temps pour que la demande de la première URL soit passée pour que celle-ci soit visitée au lieu de la seconde.

Vous devez annuler l'action par défaut qui, lorsque vous utilisez des attributs d'événement intrinsèques (non recommandé, unobtrusive JavaScript est la voie à suivre), se fait en retournant false.

onclick="test(); return false;" 
Questions connexes