2011-02-16 15 views
6

Üzerinde çalıştığım komut dosyasında, gövdeye bir geri bildirim formu için işaretleme ekliyorum ve daha sonra jQuery ile bu öğeyi (bir DIV) ortalamaktayım. Aşağıdaki kod örneğinde, form_code form biçimleme tutar. #feedback_form için tanımlanan CSS stilleri, bir genişliği açıkça tanımlar. Bununla birlikte, eklendikten hemen sonra çağrılan genişlik() için hesaplamanın yanlış hesaplanması, sayfanın tüm genişliğine neredeyse eşit bir boyut döndürmesidir.DIV genişliği, eklentiden hemen sonra yanlış mı hesaplanıyor?

Genişliği konsolda, saniye sonra bile uyarırsam, doğru hesaplar. Buna daha önce hiç rastlamadım, birileri buna ışık tutabilir mi?

jQuery('body').append(form_code); 
alert(jQuery("#feedback_form").css("width")); 

cevap

18

Javascript kodunuz, HTML'yi oluşturan kişiye farklı bir iş parçacığında çalışıyor. Yeni kodu ekledikten hemen sonra genişliği sorgularsanız, görsel iş parçacığı sayfayı yayınlamak için zamana sahip olmazdı, böylece eski veya olası bir ara, genişlik elde edersiniz.

Bu, yeni tarayıcılarda durumun geçerli olup olmadığından emin değilim, ancak kesinlikle eski kullanıcılar işbirliği içinde çok görevli olduklarından, sayfanın, güncellemeye izin vermek için açıkça duraklatılana kadar güncellenmemesi sağlandı.

Aşağıdaki kodu kullanırsanız, sıfır saniye duraklatması, tarayıcının yeniden işlem olayını işlemesine izin verdiği için işe yaradığını görürsünüz.

function show_width() { 
    alert(jQuery("#feedback_form").css("width")); 
} 
setTimeout(show_width, 0); 
+0

İlginç. Bu çalışıyor, teşekkürler: P – Mike

0

Ne yapmak istiyorsunuz? Kodunuz DOM'a öğe (ler) ekliyor, bu da zaman alıyor. Form_code'ınızı ekledikten sonra, genişliğe vb. Dayalı bir şeyi işlemeye mi çalışıyorsunuz?

İlgili konular