2010-11-21 24 views
0

Ich versuche, die Eingabeüberprüfung bei einem Benutzerklick durchzuführen. Die jQuery click() -Funktion hat jedoch inkonsistent gearbeitet; manchmal verhält es sich so, wie ich es erwarte und manchmal macht das Klicken auf den Link nichts, außer das Ansichtsfenster an den oberen Bildschirmrand zu bewegen. Das Problem ist, dass ich den Fehler nicht konsistent replizieren kann; manchmal funktioniert es und manchmal nicht. Ich habe es sowohl in Firefox unter Windows XP als auch in Chrome 9.0 auf dem Mac reproduziert. Manchmal funktioniert die Seite jedoch, manchmal nicht. Einmal, als es falsch geladen wurde, versuchte ich den Cache zu leeren und die Seite erneut zu laden, und die Seite wurde immer noch nicht geladen. Es sieht so aus, als würde man nicht nach Laden der Datei laden, besonders nach großen Änderungen an der Datei.jquery click() arbeitet inkonsistent

Ich habe hier einen reduzierten Testfall eingerichtet: http://kburke.org/thesis/consentform1.php. Wenn das Formular korrekt funktioniert, sollte es eine Warnmeldung anzeigen. Hier ist der 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> 

Vielen Dank für jede Einsicht haben Sie vielleicht, ich bin ratlos vor allem, dass das Verhalten unvereinbar ist.

Bearbeiten: Es wurde vorgeschlagen, dass console.log die Probleme verursachte, aber ich habe weiterhin Probleme nach dem Entfernen von Konsolenanweisungen. Das Ausführen des JS-Debuggers von Chrome schlägt vor, dass der Code innerhalb des $("#submitlink")-Aufrufs überhaupt nicht ausgeführt wird, wenn das Problem auftritt. Wie immer schätze ich Ihre Hilfe.

+0

Die ganze Seite die Fehler produzieren ist hier: http://kburke.org/thesis/consentform.php –

+0

der Link auf der Seite funktioniert auf meinem Chrome gut. .. – Lukman

+0

Die aktuelle Version (wo es nicht funktioniert) für mich ist Chrome 7.0 auf einem Mac. Ich habe es auch nur auf den kleinstmöglichen Fall reduziert und es funktioniert immer noch nicht für mich. –

Antwort

1

löste ich das Problem. Die Google Voice Chrome-Erweiterung fügte der Telefonnummer auf der Seite einen Link hinzu, der die jQuery-Aktion beeinträchtigte. Signifikante Tests: Sowohl das Entfernen des Elements auf der Seite als auch das Deaktivieren der Chrome-Erweiterung haben bestätigt, dass die Erweiterung das Problem verursacht hat.

Das nächste Mal werde ich versuchen, daran zu erinnern, alle Erweiterungen zu deaktivieren, um zu sehen, ob man das Problem verursacht.

Ich legte hier einen Bug-Report: http://code.google.com/p/chromium/issues/detail?id=64019

+0

Eigentlich habe ich gerade herausgefunden, dass, wenn Sie die Funktion für gvoice deaktivieren, um anklickbare Zahlen zu machen, das Problem verschwindet. – robx

3

Ich bemerkte, dass Sie in Ihrem Code einige console.log() Anweisungen hatten. Was ich auch bemerkt habe, ist, dass, als ich Firebug geöffnet hatte, dein Code funktioniert hat. Als ich Firebug ausgeschaltet hatte, funktionierte der Code nicht. Das console Objekt ist nicht Teil von JavaScript selbst. Es wird von Firebug (und vielen anderen Debugging-Tools) erstellt, um die Massen-Debug-Methode alert zu ersetzen. Wenn Firebug deaktiviert war, führten die Zeilen console.log() zu schwerwiegenden Fehlern, die die Ausführung von JavaScript stoppten.

+0

Hmmm. Das würde es anscheinend erklären, zumal ich nach Fehlern suchen würde, indem ich die Konsole in Firebug öffne, die die Fehler nicht zeigen würde. –

+0

@Kevin, es ist immer sicher, consolo.log Nachrichten in try catch Block zu halten, da alle Browser dies nicht unterstützen. – kobe

+0

Normalerweise mache ich so etwas wie eine 'safeLog' -Funktion mit' if ($ .isFunction (console.log)) {console.log (...); } ' – rossipedia

0

entfernen console.log, wie console.log gewohnt zur Verfügung stehen immer