我有2个.js
文件,第一个是plugins.js
,第二个是ui.js
,并且都在检查器的“调试”上可见,因此都包含在内
我在plugins.js
中有一个jquery函数,需要在ui.js
中调用,因此我首先将plugins.js
入队,然后在其下立即将ui.js
入队。 / p>
但是,网络浏览器中的控制台告诉我该功能未定义,并且无法正常工作。
如果我将功能从plugins.js
剪切并粘贴到ui.js
中,它将起作用。当我也在JSfiddle中尝试过时,它也起作用了。
functions.php
function add_scripts() {
wp_enqueue_script( 'plugins', get_template_directory_uri() . '/javascript/plugins.js', array( 'jquery', 'jquery-ui-core' ) , '1.0.0', true );
wp_enqueue_script( 'ui' , get_template_directory_uri() . '/javascript/ui.js' , array(), '1.0.0', true );
}
add_action('wp_enqueue_scripts', 'add_scripts');
plugins.js
:
jQuery(document).ready(function($) {
function PNGPreloader(e,t,i,r,n,a){...}
});
ui.js
:
jQuery(document).ready(function($) {
$(...).each(function(){
mobileIcons[ID] = new PNGPreloader($object,frames,size[0],size[1],20,false);
});
如果我将plugins.js
中的函数放在ui.js
中,它将起作用:
jQuery(document).ready(function($) {
function PNGPreloader(e,t,i,r,n,a){...}
$(...).each(function(){
... = new PNGPreloader(...);
});
答案 0 :(得分:2)
应该将jquery-ui-widget
添加到wp_enqueue_script
的依赖项参数中。
function stripesinteriors_theme_resources() {
wp_enqueue_script( 'plugins', get_template_directory_uri() . '/javascript/plugins.js', array( 'jquery', 'jquery-ui-core', 'jquery-ui-widget' ), '1.0.0', true );
wp_enqueue_script( 'ui' , get_template_directory_uri() . '/javascript/ui.js' , array() , '1.0.0', true );
}
答案 1 :(得分:1)
您可以将function PNGPreloader(e,t,i,r,n,a){...}
移出jQuery(document).ready(function($) { ... });
块吗?
这是一个范围界定问题,因为ui.js中的代码对于plugins.js中准备好文档的调用函数内部没有任何可见性。
或者您也可以执行以下操作:
plugins.js:
var fnPNGPreloader; // globally accessible
jQuery(document).ready(function($) {
fnPNGPreloader = function (e,t,i,r,n,a) {
/*.. assuming you do stuff with "$" in here ..*/
};
//...
});
ui.js:
jQuery(document).ready(function($) {
$(...).each(function(){
mobileIcons[ID] = new fnPNGPreloader($object,frames,size[0],size[1],20,false);
});
});