如何在 JavaScript jQuery 中从一个脚本访问另一个脚本中的函数

How to access a function from one script in another script in JavaScript jQuery

提问人:stst 提问时间:8/14/2023 最后编辑:LoicTheAztecstst 更新时间:8/18/2023 访问量:59

问:

在wordpress中,我有两个脚本一个接一个地排在函数.php中,如下所示:

第一个排队 jQuery:

function enqueue_scripts() {
wp_enqueue_script('jquery');
}
add_action('wp_enqueue_scripts', 'enqueue_scripts');

然后是脚本:

add_action('wp_enqueue_scripts', 'enqueue_my_scripts'); 
function enqueue_my_scripts() {
wp_enqueue_script(
    'script1',
    get_template_directory_uri() . '/assets/js/script1.js',
    array('jquery'), '1.0', true
);
wp_enqueue_script(
    'script2',
    get_template_directory_uri() . '/assets/js/script2.js',
    array('jquery'), '1.0', true
);
} 

我的脚本1.js的内容:

 jQuery(document).ready(function($) {
   function myFunction1() {
   // do something
   }
 });

我的脚本2.js的内容:

 jQuery(document).ready(function($) {

         myFunction1();

});

控制台中的错误:在 script2.js 中Uncaught ReferenceError: myFunction1 is not defined

我检查了“网络”选项卡,脚本已加载并且顺序正确,没有其他错误。

我尝试了几件事,例如将 script1.js 的 jQuery 更改为纯 Javascript 并将其放在全局范围内,而没有文档就绪函数,没有任何效果。为什么函数 myFunction1 在我的脚本 2 .js 中无法访问?如何解决错误?

JavaScript jQuery WordPress 函数 就绪

评论

0赞 Roko C. Buljan 8/15/2023
(题外话)你可以用较短的代替长jQuery(document).ready(function($) {jQuery($ => {

答:

1赞 LoicTheAztec 8/15/2023 #1

你的函数不需要等待 DOM 完全加载,所以不要将 jQuery 事件与你的函数一起使用,因为它不是必需的,也不允许你的第二个脚本找到该函数。ready()

更新:您应该将速记作为参数添加到函数中,以避免在函数中使用速记时出现“未捕获的 TypeError:$ 不是函数”(请参阅下文:代码示例已更新)。$$

script1.js文件的内容:

function myFunction1($) {
    const content = '<p style="color:red;border:solid 2px red;">Success: function called… <strong>Click me to remove me</strong></p>';

    console.log('success: function called');

    $(document.body).prepend('<div class="sprout">'+content+'</div>');

    $(document.body).on('click', '.sprout', function (){
        console.log('click: removed');
        $(this).remove();
    });
};

在第二个脚本中,我们使用 event 方法,因为它需要等待 DOM 完全加载并安全操作。ready()

script2.js文件的内容:

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

注意:和是相同的。jQuery(document).ready(function($){jQuery(function($){

请参阅 jQuery .ready() 事件文档

评论

0赞 stst 8/18/2023
它可以工作,但我仍然在获取一些文件,尽管以正确的顺序排队并且 jQuery 应该可用,因为代码有效。例如,我尝试使用 instead of ,但代码不再按预期工作。Uncaught TypeError: $ is not a functionjQuery(document).on('click', 'someClass', function () {}$(document).on('click', 'someClass', function () {}
0赞 LoicTheAztec 8/18/2023
@stst我已经更新了我的答案它应该可以解决任何相关问题......注意:您应该使用 代替 .$(document.body).on('click', 'someClass', function (){$(document).on('click', 'someClass', function (){