【问题标题】:Cannot call a js function from external loaded file on wordpress无法从 wordpress 上的外部加载文件调用 js 函数
【发布时间】:2018-05-21 04:34:36
【问题描述】:

我无法从外部加载的文件调用函数。

我有 search_form.php,我从那里调用函数,定义函数的 client.js 文件,以及 plugin_functions.php 文件,我在其中加载 client.js 文件。

在 plugin_functions.php 文件中我有以下代码:

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() is not defined.

我做错了什么?这肯定是范围问题,但我无法弄清楚。

【问题讨论】:

  • 在控制台显示什么错误?和 Ctrl + U 检查你的 JS 是否链接?
  • 查看最后一段,JS文件已链接。我得到的错误是 ReferenceError: validateForm() is not defined.

标签: javascript php wordpress scope


【解决方案1】:

请尝试将 JS 加载到页脚中。

设置页脚为真。我认为它会起作用。

wp_register_script( 'js-client', PLUGIN_URL.'includes/js/client.js',array('jquery'),false,true);

【讨论】:

    【解决方案2】:
    (function($) {
     window.validateForm = function(){
        console.log('Form validated');
    };
    })( jQuery );
    
    <div onclick="window.validateForm()">
    CLICK ME
    </div>
    

    你是对的,在你的例子中,范围是错误的,因为包裹在(function($) {这个匿名函数中。

    为清晰起见进行编辑:如果您希望它是一个全局可访问的函数,您可以将其附加到窗口对象,就像本例中一样。

    【讨论】:

    • 我试图将 validateForm 函数移到父函数之外,但没有工作。另外,我在函数名称之前添加了“窗口”,这两个地方..我在控制台上得到了同样的错误。
    • 您可以复制粘贴此答案中的代码,它会起作用。您需要将该函数设置为窗口范围变量,例如我在上面的示例中所做的。如果该代码不起作用,则说明您的脚本未正确包含。
    • 这就是为什么我无法弄清楚的原因,因为在环境之外,一切都应该工作并且它正在工作。包含该文件,因为我在控制台上获得了“loaded_client”输出。
    • console.log('loaded_client')移动到load_client_scripts()的最后一行,看看它是否仍然输出,在当前的形式下你不知道它不会在下一行出错。跨度>
    • 它适用于您的示例。当我从检查元素检查 client.js 文件时,我发现它不包含我的函数。这是一个缓存问题。现在,该函数在窗口空间上声明,如您的示例所示。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    相关资源
    最近更新 更多