9

奇妙な状況:

jQueryと を使用してメニュー バーを作成していますCSS
私の JavaScript ファイルには、次のon-readyような関数があります。

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

と...

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

何らかの理由で、すべてのドキュメントの読み込みが完了する前であっても、警告メッセージの幅が正しくありません。メッセージをリリースしたときにのみ、残りのドキュメントが読み込まれ、適切な幅が得られます。

すべてのドキュメントの読み込みが完了する前に関数が呼び出されるのはなぜですか? 特定の要素のロードが完了した後にのみ関数をロードする方法はありますか (例:nav要素)?

4

6 に答える 6

13

window.loadを使用できます。これは、すべてのリソースの読み込みが完了した後にトリガーされます。

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

load イベントは、ドキュメントの読み込みプロセスの最後に発生します。この時点で、ドキュメント内のすべてのオブジェクトが DOM にあり、すべての画像とサブフレームの読み込みが完了しています

于 2013-04-19T18:11:15.093 に答える
8

現在の解決策はすべて、主な問題の症状を治療するだけです。すべての ajax ロード後にハンドラーを実行する場合は、promise を使用できます。

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

jQuery(function($) {
    $.when.apply($, [ajax1, ajax2]).done(function() {
        // your code here
    });
});
于 2013-04-19T18:16:44.227 に答える
3

ウィンドウロードイベントを試してください:

$(window).load(function() {
    //Stuff here
});
于 2013-04-19T18:11:39.483 に答える
2

確かに、Try windowload

$(window).load(function(e) {
    mark_active_menu();
}
于 2013-04-19T18:11:39.333 に答える
0

私の状況では、AJAX と HTML を使用しています。関数 $(document).ready() と $(window).load() にも同じ問題があります。AJAX リクエストが終了した直後に実行される jQuery 関数に、イベントのハンドラー (HTML DOC で動作するはず) を追加することで、この問題を解決しました。これを読んでください:「jQuery.post()」(関数の3番目のパラメーター)。

私のコードでは、次のようになります。

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");
            });
        }
    )
}
于 2016-07-07T09:10:52.440 に答える
0

前(場合によっては、最初に完全にロードされず、数ミリ秒後(約0〜200ミリ秒)):

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

後:

$(window).load(function(){
$('body').delay(500).show(0);
});
于 2015-06-21T06:59:53.390 に答える