1

ID を持つラベルから単純に値を取得しようとしています。私はjQueryの経験がありますが、スクリプトの最初の行で「Uncaught TypeError: object is not a function」エラーが発生し続ける理由がわかりません。

何か案は?

<!DOCTYPE html>
<html>
<head>
    <meta charset='UTF-8' />
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
</head>
<body>
    <div>
        <label id="test">Value</label>
    </div>
    <script>
        jQuery(window).load(function ($) {
            var label = $('#test');
            var prev = label.text();
        });
    </script>
</body>
</html>

前もって感謝します。

4

2 に答える 2

2

のコールバックが受け取る最初の引数は.loadイベント オブジェクトです。

jQuery(window).load(function ($) {
//                            ^ receives a jQuery event object

最初のパラメーターとして受け取るDOM Ready ハンドラーと混同している可能性があります。jQuery

//both of these would have $ as an alias for jQuery:
jQuery(document).ready(function($){});
jQuery(function($){});

問題に戻ると、それを修正するには3つの方法があります。

まず、がグローバル スコープにある場合はコールバックからパラメータを$削除/名前変更することで問題を簡単に解決できます。$.load$

それ以外の場合、jQuery がnoConflictモードの場合は、IIFEラッパーを使用して手動でエイリアスを作成でき$ます。

(function($) { //aliases jQuery to $ inside this scope
    $(window).load(function() {
        //$ references jQuery in inner scopes too as long as you don't shadow it
        var label = $('#test');
        var prev = label.text();
    });
}(jQuery));

windowそして 3 番目のオプションとして、のイベントを待つ必要がない場合は、load代わりに DOM Ready ハンドラーを使用してください。ハンドラーはready(DOM 構造の準備が整うとすぐに) より早く起動しますが、はすべてwindow.loadリソース (画像を含む) が最初に読み込まれるまで待機する必要があります。

ほとんどの場合.ready()は十分な時間であり、ページを操作する前に最後の画像が読み込まれるまでユーザーを待たせることはありません。画像の寸法などを扱っている$(window).load()場合は、もっと興味深いかもしれません。実験して見てください。

于 2013-04-29T21:34:00.770 に答える