SORU
22 NİSAN 2009, ÇARŞAMBA


Neden setTimeout, 0 fn () bazen faydalıdır.

Son zamanlarda JavaScript ile kod <select> bir dinamik olarak yükleme oldukça kötü hata, neyin içine düşmüştüm. Bu dinamik <select> önceden seçilmiş bir değer vardı yüklü. IE6, biz zaten vardı kod düzeltmek için seçilen <option>, çünkü bazen <select>selectedIndex değeri olurdu dışarı senk ile seçilen <option>index öznitelik, aşağıdaki gibi:

field.selectedIndex = element.index;

Ancak, bu kod işe yaramıyordu. Alanı selectedIndex doğru şekilde ayarlı olmasına rağmen, yanlış dizin seçili olmuyor. Eğer doğru zamanda alert() bir deyim soktum ancak doğru seçenek seçili olur. Bu zamanlama sorunu çeşit olabilir düşünme, kod daha önce görmediğim bir şey rastgele denedim:

var wrapFn = (function() {
    var myField = field;
    var myElement = element;

    return function() {
        myField.selectedIndex = myElement.index;
    }
})();
setTimeout(wrapFn, 0);

Ve bu işe yaradı!

Benim sorun için bir çözüm var, ama bu benim sorunum düzeltmeleri tam olarak bilmiyorum huzursuzum. Kimse resmi bir açıklama var mı? Ne tarayıcı sorunu "daha sonra 13**?" seçeneğini kullanarak, benim işlevini çağırarak kaçıyor muyum

CEVAP
23 NİSAN 2009, PERŞEMBE


Bu kooperatif çoklu görev yaptığın için çalışır.

Bir tarayıcı olan şeylerin sayısı çok fazla tek seferde yapmak zorunda, ve o sadece bir JavaScript yürütmek. Ama şeylerden biri JavaScript tarayıcı görüntüleme bir öğe oluşturmak için sormak için çok sık kullanılır. Bu genellikle eşzamanlı olarak özellikle JavaScript paralel olarak yürütülen, yapmış olduğu varsayılır ama bu durumda garanti yok ve JavaScript bekliyorum iyi tanımlanmış bir mekanizma yok.

Bu çözüm "" JavaScript yürütme işleme konuları konuşalım. pause Ve bu 14* *bir zaman aşımı ile olan etkisidir0yok. Böyle bir iş parçacığı/süreç verimi C. Ancak öyle görünüyor ki "bunu hemen" aslında verir tarayıcı bir şans için son yapmak olmayan bazı JavaScript şeyler var bekleyip bitirmek önce katılan yeni bir parça JavaScript.

(Aslında setTimeout() yürütme sırasının sonunda yeniden sıralar yeni JavaScript. Daha uzun bir açıklama için bağlantılar için yorumlara bakın.)

IE6 sadece bu hata için daha açık olur, ama Mozilla Firefox eski sürümleri ve ortaya gördüm.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AndyMcMillinTV

    AndyMcMillin

    6 HAZİRAN 2007
  • ecf150king

    ecf150king

    20 Ocak 2006
  • Jonathan D.

    Jonathan D.

    3 Kasım 2006