-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 准备好后再执行任何代码。

您可以在第一个内部使用第二个:

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

两者都做!

于 2012-11-28T22:31:24.297 回答
2

当您在<head>类似的部分中有一个函数时,它会立即执行,并且在您的 HTML 元素开始加载之前执行此操作。在您的代码执行时,您的元素#wrapper,#header.header-menu类中的任何内容都不存在,这就是它失败的原因。

在第二个示例中,使用domready事件会延迟代码的触发,直到 DOM 准备好(并且您的 HTML 元素存在)之后,所以代码可以工作。

顺便一提,

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

只是一个捷径:

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

上面的例子是 jQuery 提供的特定功能。不要将前者与立即执行的函数结构混淆,后者是纯 JavaScript:

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

有关如何正确结合两者的信息,请参阅adeneo 的答案。

于 2012-11-28T22:31:37.773 回答
1

$(document).ready实际上在创建之后DOM运行。

如果在构建 DOM 之前插入到<head>部分中,自调用函数会立即运行。

于 2012-11-28T22:30:43.157 回答