1

編集: ajax を使用してコンテンツにテキストをロードしているため、onload on head は適用されません。

ここにほぼ完全なプロジェクトがあります http://sandbox.littlegraffyx.com/bible/test2.html (左下に gen 1:1 と入力して開始します)

私が抱えている唯一の問題は、ウィンドウ上のテキスト コンテンツを自動調整する関数を呼び出す前に、メイン テキストが表示されるメイン div が完全に読み込まれていることを確認することです。

自動調整機能が機能する場合と機能しない場合があります。機能しない理由は、関数を呼び出したときに div がまだ完全にロードされていない可能性があるためです。

echo "<div id=\"verse\">" . $bcontent . "</div>";

echo "<script type='text/javascript'>
    scaleQuote();";
echo "</script>";

scalequote サンプルは、こちらの他の質問にあります

身長(縦の長さ)に合わせてサイズ調整

これが私が行った検索であり、私の場合、これらの投稿で提供されているソリューションをどのように適用できるかわかりません。そのため、自分で質問しています. 「研究不足」で反対票を投じられないことを願っています

div がロードされたときにのみ関数を実行するにはどうすればよいですか?

jqueryを使用して外部ソースから情報を読み込んだ後、divの高さと幅を取得する

事前に感謝し、私の英語で申し訳ありません

ファイル参照

http://pastebin.com/wwQumwKJ - 私の JS ファイル

http://pastebin.com/FnyST8iz - 私のhtmlファイル

http://pastebin.com/BYfSUjQJ - 私のCSSファイル

データベースの内容を取得することを除いて、私の php ファイルはほとんど上記の内容です。

4

3 に答える 3

2

簡潔な答え

関数内で、Ajax のコールバック内MovePrevious()に追加します。scaleQuote();

document.getElementById("versePlace").innerHTML=xmlhttp.responseText;
scaleQuote(); //<-- here

長い答え

Ajax 呼び出しで標準の JS を使用しています。あなたのような標準の Ajax 呼び出しは、応答HTMLを要素内に配置するだけで、応答テキスト内のスクリプト タグを実行しinnerHTMLません。これは、応答テキスト内のタグを解析し、DOM に追加されたときにそれを実行するjQuery のappend/メソッドとは異なります。appendToscript

では、なぜ「ほとんどの場合」機能するのでしょうか。

関数には、そのコールバック内に関数呼び出しMoveNext()が既にあるためです。scaleQuote();

于 2012-06-18T02:43:45.677 に答える
2

回答を完全に再編集します。 JQuery ライブラリはすでにページに存在するため、この全体は役に立ちません。

/* Function to get Requested Verse */
function showVerse(str)
{
if (str=="")
  {
  document.getElementById("versePlace").innerHTML="";
... etc etc.
xmlhttp.open("GET","getverse.php?q="+str,true);
xmlhttp.send();
}

に置き換えるだけです

function showVerse(str)
{
    $("#versePlace").html("");
    $('#versePlace').load('getverse.php?q='+str, function() {
        scaleQuote();
    });
}

したがってscaleQuote()、コールバック関数に移動しています。

  • この理由:scaleQuote()関数は元の HTML ページで呼び出されるようになりました。最初の問題は、AJAX 結果でスクリプトを出力すると実行されないことです!

  • 2 番目の主な関心事は、AJAX 要求が完了した後にのみ scaleQuote() 関数を呼び出すことです。AJAX の「A」は「非同期」を意味し、大まかに言えば、リクエストが完了したかどうかに関係なく、呼び出し元が実行を継続することを意味します。

scaleQuote()したがって、AJAX 要求応答が完了した後に必ず呼び出す必要があります。

JQuery の.load()関数は AJAX ページを呼び出し、結果を括弧 ( $("#versePlace")、# は「id」を表す) 内の要素に入れます。オブジェクトを使用して GET メソッドを介してデータを渡し、Ajax の要求と応答が完了した後にのみ実行されることが保証されているコールバック関数{q: str}を定義します。

JQueryを使用すると、他の機能を大幅に削減できます。

/* Function to get Next Verse */
function MoveNext()
{
   var str = parseInt($("#txtCurrent").val()) + 1;
   if (str!="")
   {
       $("#versePlace").html("");
       $('#versePlace').load('move.php?q='+str, function() {
           scaleQuote();
       });
   }
}
于 2012-06-18T02:00:18.357 に答える
0

できることの 1 つは、関数を<head>タグに入れ、その js 関数をonloaddiv のプロパティに追加することです。例えば

<body onload="scaleQuote()">
于 2012-06-18T02:01:13.083 に答える