2010-11-21 22 views
0

Kullanıcı tıklamasında giriş doğrulaması yapmaya çalışıyorum. Ancak jQuery click() işlevi tutarsız bir şekilde çalışıyordu; bazen beklediğim gibi davranır ve bazen bağlantıyı tıklamak, görüntü alanını ekranın üst kısmına taşımak dışında hiçbir şey yapmaz. Sorun şu ki, sürekli olarak hatayı tekrarlayamıyorum; bazen çalışır ve bazen olmaz. Windows XP'de ve Mac'te Chrome 9.0'da her iki Firefox'ta da ürettim, ancak bazen sayfa çalışır ve bazen olmaz. Yanlış yüklendiğinde bir kez önbelleği temizlemeyi ve sayfayı tekrar yüklemeyi denedim ve sayfa hala yüklenmedi. Özellikle dosyaya büyük değişikliklerden sonra yüklemeden yüklemeye gitmek gibi görünüyor.jquery click() tutarsız çalışıyor

Burada azaltılmış bir test durumu oluşturdum: http://kburke.org/thesis/consentform1.php. Form doğru çalışıyorsa, bir uyarı kutusu görüntülemelidir.

<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> 

Ben davranışı tutarsız özellikle de şaşkın, aklınıza gelebilecek tüm fikir için teşekkür ederiz: İşte kodudur.

Düzeltme:console.log'un sorunlara neden olduğu öne sürüldü, ancak konsol deyimlerini kaldırdıktan sonra sorun yaşamaya devam ediyorum. Chrome'un JS hata ayıklayıcısını çalıştırmak, sorun oluştuğunda $("#submitlink") aramasının içindeki kodun hiç çalışmadığını gösterir. Her zamanki gibi yardımın için teşekkür ederim.

+0

hatayı üreten tam sayfa burada: http://kburke.org/thesis/consentform.php sayfasından –

+0

bağlantı benim Chrome'da gayet güzel çalışıyor. .. – Lukman

+0

Benim için geçerli sürüm (çalışmıyor) Mac’te Chrome 7.0. Ayrıca mümkün olan en küçük duruma düşürdüm ve hala benim için çalışmıyor. –

cevap

1

Ben sorunu çözüldü. Google Voice Chrome Uzantısı, sayfada jQuery eylemine müdahale eden telefon numarasına bir bağlantı ekliyordu. Sayfadaki öğenin kaldırılması ve Chrome uzantısının devre dışı bırakılması, uzantının soruna neden olduğunu doğrulayan önemli testlerdir.

Bir dahaki sefere sorunun neden olup olmadığını görmek için tüm uzantıları devre dışı bırakmayı hatırlamaya çalışacağım.

Burada bir hata raporu açtı: http://code.google.com/p/chromium/issues/detail?id=64019

+0

Aslında, şimdi tıklanabilir numaralar yapmak için bu özelliği devre dışı bırakırsanız sorunun çözüleceğini öğrendim. – robx

3

Kodunuzda bazı console.log() ifadeleri olduğunu farkettim. Ayrıca fark ettim ki, Firebug'um açıkken kodunuz çalıştı. Firebug kapandığında, kod işe yaramadı.

console nesnesi, JavaScript'ın bir parçası değildir; Firebug (ve diğer birçok hata ayıklama araçları) tarafından toplu olarak alert hata ayıklama yönteminin yerini alır. Firebug kapalıyken, console.log() satırları, JavaScript'inizin çalışmasını durduran önemli hatalar üretti.

+0

Hmmm. Bu, özellikle hataları göstermeyen Firebug'daki konsolu açarak hataları kontrol edeceğimi açıklıyor gibi görünüyor. –

+0

@Kevin, tüm tarayıcılar bunu desteklemediği için consolo.log mesajlarını her zaman güvenli tutmak için blok tutmayı deneyin. – kobe

+0

Genellikle 'safeLog' işlevi gibi bir şey yapıyorum,' if ($. IsFunction (console.log)) {console.log (...); } ' – rossipedia

0

kaldır console.log, console.log olarak alışkanlık kullanılabilir olması her zaman