1

ページの変更がない HTML サイトがあります。ajax 呼び出しを使用して、ページの各位置にさまざまな要素をロードするだけです。最初にページが読み込まれた後にログイン機能を実行する必要があります (インデックスに要素が存在する必要があるため) が、$(document).ready(login) を使用すると、要素が読み込まれるたびに起動します (要素をページにロードすると、無限ループに陥ります)。インデックス ページの下部に配置する以外に (かなり壊れやすいようです)、インデックス ページの読み込みが完了した後に読み込む方法はありますか?

私のログイン機能は次のようになります。

function login ()
{
    if($.cookie('employee'))
        employee = $.cookie('employee');

    if(employee && !employee.login)
        $("div.middle").load('login.html');
    else
            $("div.middle").load('main.html');

}

function logout ()
{
    //FIXME send a logout request to server to end session also
    employee = null;
    $.cookie('employee', null);
    $("div.middle").load('login.html'); 
}

私の最初の準備完了関数は次のようになります。 //グローバル変数 var employee = new Object;

$(document).ready(function(){
        $("div.leftColumn").html(buildLeftNav());
        //set height of middle if height of leftColumn is less than height of middle
        if($("div.leftColumn").css('height') < $("div.middle").css('height'))
            $("div.center").css('height' , $('div.middle').css('height'));




        //handle login and logout
        $.cookie.json = true;
        login();


    });

説明するためにフィドルを設定しました:http://jsfiddle.net/uZVP4/

4

4 に答える 4

8

おそらく問題はありませんdocument.readyが、AJAX 呼び出しで同じスクリプトを何度も読み込んでいる可能性があります。スクリプトは新しいコンテンツを自動的にロードするため、新しいコンテンツをロードする無限ループが作成され、新しいコンテンツが何度もロードされます。

スクリプトをリモートページに保持する必要がある場合は、$.getajax コンテンツ内でスクリプトを実行しないものを使用できます

于 2013-01-27T00:03:37.570 に答える
2

通常$(document).ready()、ページごとに 1 回だけ呼び出されます。

「ハッキーな」ソリューションが必要な場合は、変数を設定できます

var wasReady = false;

である場合は$(document).ready()その値をに設定し、そうでない場合は何もしません。truefalse

$(document).ready(function(){
if(!wasReady)
 wasReady = true;
else return;
...
}

私は通常使用します

$(function(){
 /* code here */
});

これはドキュメントの準備ができているのと同じですが、すべてのページ (画像を含む) が読み込まれた後に JavaScript を実行したい場合は、

$(window).load(function(){ 
 /*code here */
});
于 2013-01-26T23:46:16.123 に答える
1

この問題は、「.one」を使用することで「解決」されました

$(document).one("ready", function () {
   // code
});
于 2014-02-07T19:10:48.220 に答える
0

body タグから onload に入れて、フォームが送信されるたびに実行されるようにしてください。

....
<body onload="login()">
....
于 2013-01-26T23:46:45.713 に答える