2010-11-21 6 views
0

J'essaie d'effectuer une validation d'entrée lors d'un clic de l'utilisateur. Cependant, la fonction jQuery click() a fonctionné de manière incohérente; Parfois, il agit comme je le souhaite et parfois cliquer sur le lien ne fait rien sauf déplacer la fenêtre vers le haut de l'écran. Le problème est que je ne peux pas reproduire l'erreur de manière cohérente; parfois cela fonctionne et parfois non. Je l'ai reproduit à la fois sur Firefox sous Windows XP et sur Chrome 9.0 sous Mac, mais parfois, la page fonctionne, et parfois non. Une fois quand il a mal chargé j'ai essayé d'effacer le cache, et de charger à nouveau la page, et la page ne s'est toujours pas chargée. Il semble aller de ne pas charger au chargement, surtout après de grands changements dans le fichier.jquery click() fonctionne de manière incohérente

J'ai mis en place un cas de test réduit ici: http://kburke.org/thesis/consentform1.php. Si le formulaire fonctionne correctement, il doit afficher une alerte. Voici le code:

<html> 
<head> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script> 
<script type="text/javascript"> 
$(document).ready(function(){ 

    $("#submitlink").click(function(){ 
     console.log("link clicked"); 
     alert("Clicked!"); 
    }); 
    console.log("loading..."); 
}); 
</script> 
</head> 
<body style="width:35em; margin-bottom:200px;"> 
<input type="text" value="" name="part_name" id="name1" /> 
<input type="text" value="" name = "part_name2" id="name2" /> 
<input type="checkbox" name="accept_1" id="accept_1" />I signify my agreement that all matters and issues mentioned above have been discussed to my satisfaction and agreement.  <br><br> 
<input type="checkbox" name="accept_2" id="accept_2" />I acknowledge that I am 18 years of age or older on the date of signing this consent, and that I have read and understood all of the above.</p> 
<div id="submitlink" style="float:right; color:blue; text-decoration:underline; cursor:pointer;">I agree</div> 
<form method="post" id="agree" action="/thesis/instructions.php"> 
    <input type="hidden" name="id" id="nextpage" value=""> 
    <input type="hidden" name="name" id="the_name" value="" /> 
</form> 
</body> 
</html> 

Merci pour toute idée que vous pourriez avoir, je suis déconcerté surtout que le comportement est incohérent.

Modifier: Il a été suggéré que console.log était la cause des problèmes, mais je continue d'avoir des problèmes après la suppression des instructions de la console. Exécution du débogueur JS de Chrome suggère que le code à l'intérieur de l'appel $("#submitlink") ne fonctionne pas du tout lorsque le problème se produit. Comme d'habitude, j'apprécie votre aide.

+0

La pleine page produisant l'erreur est ici: http://kburke.org/thesis/consentform.php –

+0

le lien sur la page fonctionne très bien sur mon Chrome. .. – Lukman

+0

La version actuelle (où il ne fonctionne pas) pour moi est Chrome 7.0 sur un Mac. Je l'ai juste réduit au plus petit cas possible et ça ne marche toujours pas pour moi. –

Répondre

1

je résolu le problème. L'extension Google Voice Chrome ajoutait un lien vers le numéro de téléphone sur la page, ce qui interférait avec l'action jQuery. Des tests importants, à la fois la suppression de l'élément sur la page et la désactivation de l'extension Chrome, ont confirmé que l'extension était à l'origine du problème.

La prochaine fois, je vais essayer de me souvenir de désactiver tous les postes pour voir si l'un d'eux cause le problème.

I a déposé un rapport de bogue ici: http://code.google.com/p/chromium/issues/detail?id=64019

+0

En fait, j'ai découvert tout à l'heure que si vous désactivez la fonctionnalité de gvoice pour faire des nombres cliquables, le problème disparaît. – robx

3

J'ai remarqué que vous aviez quelques instructions console.log() dans votre code. Ce que j'ai également remarqué, c'est que lorsque j'ai ouvert Firebug, votre code a fonctionné. Lorsque Firebug a été éteint, le code n'a pas fonctionné. L'objet console ne fait pas partie de JavaScript lui-même; Il est créé par Firebug (et de nombreux autres outils de débogage) pour remplacer la méthode de débogage alert en masse. Lorsque Firebug était désactivé, les lignes console.log() ont généré des erreurs fatales, ce qui a empêché l'exécution de JavaScript.

+0

Hmmm. Cela semblerait expliquer en particulier que je vérifierais les erreurs en ouvrant la console dans Firebug, qui ne montrerait pas les erreurs. –

+0

@Kevin, il est toujours sûr de garder les messages consolo.log dans try catch block car tous les navigateurs ne le supportent pas. – kobe

+0

Je crée généralement quelque chose comme une fonction 'safeLog', en utilisant' if ($. IsFunction (console.log)) {console.log (...); } ' – rossipedia

0

supprimer console.log, comme console.log ne sera pas disponible toujours

Questions connexes