-1

ヘッダーコンテンツの読み込みでこれが機能しないのはなぜですか...

(function ($) {
    var mheaderwrapper = '<div id="header"></div><div class="header-menu"></div>';
    var mheadercontent = '/shop/Pages/global_header.html';
    var mmenucontent = '/shop/Pages/global_megamenu.html';
    var mjqueryhover = 'js/jquery.hoverIntent.minified.js';
    var mjquerymenu = 'js/jquery.custom-menu.js';
    $('#wrapper').prepend(mheaderwrapper);
    $('#header').load(mheadercontent);
    $('.header-menu').load(mmenucontent, function(){
       $.getScript(mjqueryhover);
       $.getScript(mjquerymenu);
    });
})(jQuery);

しかし、これは...

  $.mheader = function() {
    var mheaderwrapper = '<div id="header"></div><div class="header-menu"></div>';
    var mheadercontent = '/shop/Pages/global_header.html';
    var mmenucontent = '/shop/Pages/global_megamenu.html';
    var mjqueryhover = 'js/jquery.hoverIntent.minified.js';
    var mjquerymenu = 'js/jquery.custom-menu.js';
    $('#wrapper').prepend(mheaderwrapper);
    $('#header').load(mheadercontent);
    $('.header-menu').load(mmenucontent, function(){
       $.getScript(mjqueryhover);
       $.getScript(mjquerymenu);
    });
   }

$(function() {
  $.mheader();
});
4

3 に答える 3

3

これ :

(function ($) {....})(jQuery);

すぐに実行され、ドル記号が自己実行関数内で実際に「jQuery」であることを確認するためにのみマップjQueryされます。$これは「DOM対応」機能ではありません。

これ:

$(function() {....});

コードが実行される前に、DOMの準備ができるまで待機します。

あなたは最初のものの中で2番目のものを使うことができます:

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

両方を行うために!

于 2012-11-28T22:31:24.297 に答える
2

そのようなセクションに関数がある場合、その関数は<head>すぐに実行され、HTML要素の読み込みが開始される前に実行されます。コードの実行時には、要素、、、#wrapperおよび#headerクラスを持つもの.header-menuはまだ存在していません。そのため、コードは失敗します。

2番目の例では、domreadyイベントを使用すると、DOMの準備が整うまで(そしてHTML要素が存在するまで)コードの起動が遅れるため、コードは機能します。

ところで、

$(function() {
    // executes when DOM is ready
});

次のショートカットです。

$(document).ready(function() {
    // executes when DOM is ready
});

上記の例は、特にjQueryによって提供される機能です。前者を、純粋なJavaScriptである即時実行関数構造と混同しないでください。

(function() {
    // executes NOW
})();

2つを適切に組み合わせる方法については、adeneoの回答を参照してください。

于 2012-11-28T22:31:37.773 に答える
1

$(document).readyが作成された後に実際に実行DOMされます。

自己呼び出し関数は、セクションに挿入する<head>と、DOM が構築される前に即座に実行されます。

于 2012-11-28T22:30:43.157 に答える