2013-04-19 23 views
7

Garip bir durum, bir jQuery işlevi yüklemek için:sadece belge bitiş yükleme sonrasında

Ben jQuery ve CSS kullanarak bir menü çubuğu inşa ediyorum. Ben, nedense ...

function mark_active_menu() { 
    var elementWidth = $("nav li").width(); 
    alert(elementWidth); 
} 

$(document).ready(function(e) { 
    mark_active_menu(); 
} 

ve hatta ÖNCE tüm belge bitiş yükleme: Benim JavaScript dosyasında
, bir on-ready fonksiyonu şöyle var Uyarı mesajını yanlış genişlikle almak. Sadece mesajı bıraktığımda, dokümanın geri kalanı yüklenir ve olması gerektiği gibi doğru genişliğe ulaşırım.

Neden tüm belgemin yüklenmesi bitmeden ÖNCE işlevi çağrılıyor? Yalnızca belirli bir öğenin yüklenmesi bittikten sonra (Örnek: nav öğesi) işlevi yüklemek için bir yol var mı?

+1

Yüklediğiniz Are parçalar: Benim kod

Bu gibi görünüyor? –

+0

'$ (window) .on ('resize', fn)' veya '$ (window) .on ('load', fn)' içine girebilirsiniz. –

+0

Ayrıca, "ready()" yöntemine eventObject değil, jQuery nesnesinin kendisi iletilir. –

cevap

11

window.load'u kullanabilirsiniz, tüm kaynak yüklemeleri tamamlandıktan sonra tetiklenir.

$(window).load(function(e) { 
    mark_active_menu(); 
}); 

belge yükleme işleminin sonunda yük olayı. Bu noktada anda, belgedeki tüm nesneleri DOM ve tüm görüntüleri ve alt çerçeveler Reference

+1

Bu mantıklı değil. Seçici "$ (" nav li ")' ... Görüntü veya kareyi göremiyorum ... Sorun içeriğin yüklenmesi için AJAX ile. – Ian

+0

@lan Kodumda AJAX var, ancak hiçbiri belge ile yüklenmiyor ancak kullanıcı tetikledikten sonra –

+0

@ Lior Bu yüzden, kullanıcı ** 'yi tetikleyene kadar sayfada hiçbir şey gösterilmiyorsa, nasıl tetiklenir? $ (document) .ready 'doğru zamanda mı yürütüyor? Neyse, '' $ (window) .load' aynı sebepten dolayı probleminiz için bir fark yaratmamalı – Ian

2

pencere deneyin, emin olmak için, yükleme bitirdikten load

$(window).load(function(e) { 
    mark_active_menu(); 
} 
+0

Bu herhangi bir fark yaratmıyor - sorun içeriğin yüklenmesi AJAX ile. – Ian

3

pencere yük olayı deneyin:

$(window).load(function() { 
    //Stuff here 
}); 
+0

Bu bir fark yaratmıyor - sorun içeriğin yüklenmesi AJAX ile. – Ian

5

tüm güncel çözümler sadece ana problemin semptomları tedavi etmektir. İşleyicinizin tüm ajax yüklerinizden sonra 'u çalıştırmasını istiyorsanız, bir söz verebilirsiniz.

var ajax1 = $.ajax(); 
var ajax2 = $.ajax(); 

jQuery(function($) { 
    $.when.apply($, [ajax1, ajax2]).done(function() { 
     // your code here 
    }); 
}); 
+0

Diğer cevaplar herhangi bir AJAX maddesini dikkate almaz. AJAX istekleri, 'window.onload' yangınları tarafından yapılabilir veya olmayabilir. Bu doğru cevap. Daha fazla oy verdim ama daha fazla oy vermedim :( – Ian

+0

Teşekkür ederim, bu son derece iyi çalışıyor. Aslında bunun daha hızlı gerçekleşmesi için var mı? Dinamik olarak yüklenmiş bir div içindeki metni değiştirmem gerekiyordu, işe yarıyor , sadece küçük bir gecikme var. –

0

(bazen başlangıçta kesinlikle yüklemez, (sonra birkaç milisaniye 0-200ms yaklaşık)) Önce:

$(document).ready(function(){ 
$('body').hide(0); 
}); 

sonra: In

$(window).load(function(){ 
$('body').delay(500).show(0); 
}); 
0

benim AJAX ve HTML ile çalışma durumu. $ (Document) .ready() ve $ (window) .load() işlevleriyle aynı sorunu yaşıyorum. Etkinliğimin işleyicisini (HTML DOC'de çalışması gereken) AJAX denetçisinin bittikten hemen sonra çalışan jQuery işlevine ekleyerek bu sorunu çözdüm. Bunu okuyun: " jQuery.post()" (işlevde üçüncü parametre). ajax ile belgenizin

var RequestRootFolderContent = function(){ 
    $.post(
     'PHP/IncludeFiles/FolderContent.inc.php', 
     function(data){ 
      $('[class~="folder-content"]').html(data); 

      //Here what you need 
      $('[class~="file"]').dblclick(function(){ 
       alert("Double click"); 
      }); 
     } 
    ) 
} 
İlgili konular