提问人:stst 提问时间:8/14/2023 最后编辑:LoicTheAztecstst 更新时间:8/18/2023 访问量:59
如何在 JavaScript jQuery 中从一个脚本访问另一个脚本中的函数
How to access a function from one script in another script in JavaScript jQuery
问:
在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 中无法访问?如何解决错误?
答:
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($){
评论
0赞
stst
8/18/2023
它可以工作,但我仍然在获取一些文件,尽管以正确的顺序排队并且 jQuery 应该可用,因为代码有效。例如,我尝试使用 instead of ,但代码不再按预期工作。Uncaught TypeError: $ is not a function
jQuery(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 (){
评论
jQuery(document).ready(function($) {
jQuery($ => {