2013-02-17 120 views
1

我已经与Codeigniter集成锅炉板。我正在使用codeigniter模板。当我在页面中调用任何jQuery内联函数时,它会在控制台中显示'$ is not defined'。所以我复制了jquery代码并将它放在main.js文件中并且它工作正常。然而,当我在这个依赖于jquery插件的页面中包含任何脚本文件时,它会向我显示相同的jquery未定义错误。请帮帮我!!Codeigniter和样板集成 - jQuery undefined问题

回答

1

@WillemLabu是正确的,在定义之前不能使用jQuery。 jQuery包含在页面中后,您必须放置使用jQuery的脚本。

Boilerplate将脚本放在页脚中,因为典型的应用程序会从脚注中的外部脚本运行它们的javascript。

的解决方案是

  1. 将jQuery的在头部;或
  2. 将jQuery放入脚中,并将内联脚本附加到jQuery包含的对象后面。

你可以做到这一点是这样的:

head.php

<html> 
<head> 
... 
<!-- define a global object to attach your scripts to --> 
<script type="text/javascript">APP_READY = { callbacks: []};</script> 
</head> 

yourView.php

<!-- add your inline scripts inside the APP_READY namespace --> 
<script type="text/javascript"> 
// MODULE 
APP_READY.callbacks.push(function() { 

    alert('simple example of APP_READY Callback'); 

}); 
</script> 

anotherView.php

<script type="text/javascript"> 
// MODULE 
APP_READY.callbacks.push(function() { 

    var exampleModule = []; 

    exampleModule.init = function() { 
    alert('modular example of APP_READY Callback'); 
    }; 

    exampleModule.init(); 

}); 
</script> 

foot.php

<!-- include jQuery --> 
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> 

<!-- execute your Object --> 
<script type="text/javascript"> 
(function($) { 
    'use strict'; 

    // Initialise the callbacks 
    // 
    for (var i =0; i<APP_READY.callbacks.length; i++) { 
    var callback = APP_READY.callbacks[i]; 

    if(callback && typeof callback == 'function') { 
     callback(); 
    } 
    } 

})(jQuery); 
</script> 
0

JavaScript按顺序运行,这意味着在尝试和使用它之前需要包含jQuery。

确保jQuery包含在尝试使用$()jQuery()的任何其他代码之前(上方)。

+0

感谢您的快速回复。我知道它是按顺序运行的。但是如果你看看HTML5 Boiler板的设计,它会加载所有的JavaScript文件和结尾。在这种情况下该怎么办? – Ansuman 2013-02-17 09:00:34

+0

同样的事情仍然适用,HTML5BP只是遵循在DOM和CSS之后加载脚本的最佳做法。重点在于,任何需要jQuery的JavaScript都需要在jQuery加载后才被包含,因为直到那时,'$'和'jQuery'变量才会被定义为'undefined'。 – Labu 2013-02-17 09:20:44

+0

我同意。但我不想用所有外部JavaScript插件调用来重载页眉/页脚,而是希望在必要时在页面中包含外部插件。有什么办法可以做到这一点? – Ansuman 2013-02-17 09:35:12