Javascript 无法从wordpress上的外部加载文件调用js函数
从外部加载的文件调用函数时遇到问题 我有search_form.php,从这里我调用函数,定义函数的client.js文件,以及加载client.js文件的plugin_functions.php文件 在plugin_functions.php文件中,我有以下代码:Javascript 无法从wordpress上的外部加载文件调用js函数,javascript,php,wordpress,scope,Javascript,Php,Wordpress,Scope,从外部加载的文件调用函数时遇到问题 我有search_form.php,从这里我调用函数,定义函数的client.js文件,以及加载client.js文件的plugin_functions.php文件 在plugin_functions.php文件中,我有以下代码: console.log('loaded_client'); function load_client_scripts() { wp_register_script('js-client', PLUGIN_URL.'inc
console.log('loaded_client');
function load_client_scripts() {
wp_register_script('js-client', PLUGIN_URL.'includes/js/client.js',array('jquery'),false);
wp_enqueue_script( 'js-client' );
};
add_action( 'wp_enqueue_scripts', 'load_client_scripts' );
在client.js中,我将函数定义如下:
(function($) {
function validateForm(){
console.log('Form validated');
};
})( jQuery );
最后,在search_form.php中,我使用onclick调用函数:
<div onclick="validateForm()">
CLICK ME
</div>
点击我
现在,js文件正在正确加载,因为我得到了控制台输出“loaded_client”。但是,当我单击div时,我得到ReferenceError:validateForm()未定义
我做错了什么?这当然是一个范围问题,但我无法解决 (函数($){
(function($) {
window.validateForm = function(){
console.log('Form validated');
};
})( jQuery );
<div onclick="window.validateForm()">
CLICK ME
</div>
window.validateForm=函数(){
console.log('formvalidated');
};
})(jQuery);
点击我
您是正确的,在您的示例中,作用域是错误的,因为包装在(function($){
这个匿名函数中
为清晰起见进行编辑:如果希望它是一个全局可访问的函数,可以将其附加到窗口对象,如本例所示。请尝试将JS加载到页脚中 设置页脚为真。我认为它会起作用
wp_register_script( 'js-client', PLUGIN_URL.'includes/js/client.js',array('jquery'),false,true);
在控制台中显示了什么错误?Ctrl+U检查JS是否链接?检查最后一段,JS文件是否链接。我得到的错误是ReferenceError:validateForm()未定义。我试图将validateForm函数移到父函数之外,但不起作用。此外,我添加了“窗口”在函数名之前,两个位置..我在控制台上得到相同的错误。您可以复制粘贴此答案中的代码,它将工作。您需要将函数设置为窗口范围变量,就像我在上面的示例中所做的那样。如果该代码不工作,则说明您的脚本未正确包含。这就是为什么我无法找到它,beca在环境之外使用,一切都应该正常工作。文件包括在内,因为我在控制台上获得了“加载的客户端”输出。将
console.log(“加载的客户端”)
移动到加载的客户端脚本()的最后一行
然后查看它是否仍然以当前形式输出,您不知道它在下一行中没有错误。它与您的示例一起工作。当我从inspect元素检查client.js文件时,我发现它不包含我的函数。这是一个缓存问题。现在,该函数在窗口空间中声明,如您的示例所示。谢谢!