2012-11-28 35 views
-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(); 
}); 
+0

這看起來不錯......'$ function(){ $ .mheader(); });' – elclanrs

+0

我的錯誤 - 我趕緊打字, – blackhawk

回答

3

此:

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

立即執行,並且只映射到jQuery$確保美元符號真的是「jQuery的」自執行的函數中。它是而不是「DOM ready」功能。

此:

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

將等待,直到執行任何代碼之前DOM已準備就緒。

您可以使用第一個內部的第二個:

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

兩者都做!

+0

真棒!我不知道! – blackhawk

+2

你可以用這種方式使用第二個:'jQuery(function($){/ * code here * /});' –

1

$(document).ready實際在之後運行創建了DOM

如果在構建DOM之前插入<head>部分,則自調用函數將立即運行。

1

當你在<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's answer對於如何正確將二者結合起來。

相關問題