Je dispose d'un minuteur dans mon JavaScript qui doit émuler le clic sur un lien pour accéder à une autre page une fois le temps écoulé. Pour cela, j'utilise la fonction click()
de jQuery. J'ai également utilisé $().trigger()
et window.location
, et je peux le faire fonctionner comme prévu avec les trois.
J'ai observé un comportement étrange avec click()
et j'essaie de comprendre ce qui se passe et pourquoi.
Je n'utilise Firefox pour tout ce que je décris dans cette question, mais je suis également intéressé par ce que les autres navigateurs feront avec ça.
Si je n'ai pas utilisé $('a').bind('click',fn)
ou $('a').click(fn)
pour définir un gestionnaire d'événements, alors appeler $('a').click()
semble ne rien faire du tout. Il n'appelle pas le gestionnaire par défaut du navigateur pour cet événement, car le navigateur ne charge pas la nouvelle page.
Cependant, si je définis d'abord un gestionnaire d'événements, alors ça fonctionne comme prévu, même si le gestionnaire d'événements ne fait rien.
$('a').click(function(){return true;}).click();
Cela charge la nouvelle page comme si j'avais cliqué sur le lien moi-même.
Ma question est donc double: Ce comportement étrange est-il dû à une erreur de ma part quelque part ? et pourquoi click()
ne fait rien avec le comportement par défaut si je n'ai pas créé de gestionnaire personnel ?
Comme Hoffman l'a déterminé lorsqu'il a essayé de reproduire mes résultats, le résultat que j'ai décrit ci-dessus ne se produit pas réellement. Je ne suis pas sûr de ce qui a provoqué les événements que j'ai observés hier, mais je suis certain aujourd'hui que ce n'était pas ce que j'ai décrit dans la question.
Donc, la réponse est que vous ne pouvez pas "simuler" des clics dans le navigateur et que tout ce que fait jQuery est d'appeler votre gestionnaire d'événements. Vous pouvez toujours utiliser window.location
pour changer de page, et cela fonctionne bien pour moi.
2 votes
Peut-être une solution: stackoverflow.com/questions/31687759/…