75

ここで何が起こっているのかを調べようとしてウェブを調べましたが、具体的な答えを得ることができませんでした.

$(document).readyのサイトには、その中にあるコードに関係なく、複数回実行するように縫い付けられたものがあります。

.readyステートメント内で例外が発生した場合にイベントが 2 回発生する方法について、jQuery のバグ レポートを読みました。ただし、次のコードがある場合でも、2 回実行されます。

$(document).ready(function() {
    try{    
        console.log('ready');
        }
    catch(e){
        console.log(e);
    }
});

コンソールに表示されるのは、「準備完了」が 2 回ログに記録されていることだけです。例外を含む別の .ready が問題を引き起こす可能性はありますか? 私の理解では、すべての .read タグは互いに独立していましたが、これがどこに影響を及ぼしているのかわかりませんか?

サイトのヘッドブロックは次のとおりです。

<head>
<title>${path.title}</title>
<meta name="Description" content="${path.description}" />
<link href="${cssHost}${path.pathCss}" rel="stylesheet" type="text/css" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript" charset="utf-8"><!----></script>
<script src="media/js/fancybox/jquery.fancybox.pack.js" type="text/javascript" ><!-- --></script>
<script src="/media/es/jobsite/js/landing.js" type="text/javascript" ><!-- --></script>
<script src="/media/es/jobsite/js/functions.js" type="text/javascript"><!-- -->    </script>
<script src="/media/es/jobsite/js/jobParsing.js" type="text/javascript" charset="utf-8"><!----></script>
<script src="/media/es/jobsite/js/queryNormilization.js" type="text/javascript" charset="utf-8"><!----></script>
<script src="${jsHost}/js/jquery/jquery.metadata.js" type="text/javascript" charset="utf-8"><!----></script>
<script src="${jsHost}/js/jquery/jquery.form.js" type="text/javascript" charset="utf-8"><!----></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.7/jquery.validate.min.js" type="text/javascript" charset="utf-8"><!----></script>
<script src="${jsHost}/js/jquery.i18n.properties-min.js" type="text/javascript" charset="utf-8"><!----></script>

<script type="text/javascript" charset="utf-8">

function updateBannerLink() {
    var s4 = location.hash.substring(1);
    $("#banner").attr('href','http://INTELATRACKING.ORG/?a=12240&amp;c=29258&amp;s4='+s4+'&amp;s5=^');
}

</script>
</head>

JSP 変数には注意を払いませんが、ご覧のとおり、functions.js ファイルを 1 回だけ呼び出しています (.ready 関数が存在する場所です)。

4

13 に答える 13

70

準備完了イベントが 2 回発生することはありません。発生する可能性が高いのは、コードが含まれている要素を移動または操作しているコードがあり、ブラウザーがスクリプト ブロックを再実行する原因となる場合です。

これは、終了タグまたは終了タグ<head>の前にscript タグを含め、を使用しないことで回避できます。を使用しても同じ効果があります。</body>$('body').wrapInner();$('body').html($('body').html().replace(...));

于 2012-05-23T20:04:52.467 に答える
42

それは私にも起こりましたが、悪いマージのためにスクリプトが 2 回含まれていることに気付きました。

于 2014-02-20T11:21:43.287 に答える
34

これは、KendoUI を使用しているときに発生しました... ポップアップ ウィンドウを呼び出すと、document.readyイベントが複数回発生します。簡単な解決策は、一度だけ実行されるようにグローバル フラグを設定することです。

var pageInitialized = false;
$(function()
{
    if(pageInitialized) return;
    pageInitialized = true;
    // Put your init logic here.
});

ちょっとハックっぽいですが、うまくいきます。

于 2012-05-23T20:33:32.133 に答える
3

あなたは使用することを検討するかもしれません

window.onload

それ以外の

$(document).ready
于 2014-12-25T18:52:30.813 に答える
2

これを functions.js に入れて、2 回実行されないようにしてください。

var checkit = window.check_var;
if(checkit === undefined){ //file never entered. the global var was not set.
    window.check_var = 1;
}
else {
    //your functions.js content 
}

ただし、2 回目に電話をかけている場所を確認するために、さらに調べてみることをお勧めします。

于 2012-05-23T20:21:07.313 に答える
0

今朝、これが起こりました...そして、最近操作したjqueryモーダルフォームのhtmlコードを注意深く調べたところ、テーブルの終了タグを誤って削除したことがわかりました。なぜそれが原因でdocument.ready 関数が 2 回呼び出されるのかを完全に理解するのにまだ時間をかけていませんが、そうしました。テーブル終了タ​​グを追加すると、この問題が修正されました。

jQuery JavaScript ライブラリ v1.8.3 (はい、レガシー アプリです)

于 2020-03-06T12:02:30.477 に答える