Javascript 为什么下一个函数不执行?
首先我想检查jquery是否存在,然后转到下一个函数。但是没有执行下一个函数Javascript 为什么下一个函数不执行?,javascript,Javascript,首先我想检查jquery是否存在,然后转到下一个函数。但是没有执行下一个函数abc()。也许有人知道为什么 window.onload = function () { if (window.jQuery) { localStorage.setItem("key", "abc"); } else { script = document.createElement("script"); script.src = "https://ajax.go
abc()
。也许有人知道为什么
window.onload = function () {
if (window.jQuery) {
localStorage.setItem("key", "abc");
} else {
script = document.createElement("script");
script.src = "https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js";
document.head.appendChild(script);
}
};
function abc() {
$(document).keypress(function (e) {
alert(e.key);
});
}
该代码存在一些问题。这听起来像是在jQuery加载后要调用
abc
,出于某种原因,您考虑到在运行此代码之前可能已经加载了它,也可能没有加载。我看到的问题是:
- 在
中设置值不会导致函数运行;事实上,该代码中的任何内容都不会导致运行localStorage
abc
- 您没有声明
变量,这意味着代码正落入我所说的陷阱script
- 在加载所有图像和其他辅助项之后,窗口上的
事件在页面加载过程中发生非常非常晚。通常,最好在load
元素上使用script
(如果您喜欢使用模块,这很方便),或者设置,或者在关闭type=“module”
标记之前,将脚本放在正文的最末端(与旧浏览器兼容)
//如果不使用模块,请使用包装器,以避免创建不必要的全局
(功能(){
//定义初始化函数
函数init(){
$(文档)。按键(功能(e){
警惕(e.key);
});
}
//如果jQuery已加载。。。
if(window.jQuery){
//…初始化
init();
}否则{
//否则,加载它并在加载时初始化
var script=document.createElement(“脚本”);
// ^^^−−−−−−−−− 防止隐式全局变量的恐怖
script.onload=init;//是否尝试调用该方法?@NikhilGoyal它应该被自动调用代码从不调用abc
。只有在调用abc
时才会注册事件处理程序。还要注意,前一位有点奇怪,只有在已经定义了jQuery的情况下才在localStorage
中设置项…@gergemail9com-通过什么?何时?问题中的任何内容都不会调用它,也不会导致以后调用它。看起来这是一种非常罕见的模式。您添加jquery就是这样。这取决于您添加这些链接的站点结构。您只需初始化abc()函数,但从不调用它。
// Use a wrapper if not using modules, to avoid creating unnecessary globals
(function() {
// Define your initialization function
function init() {
$(document).keypress(function (e) {
alert(e.key);
});
}
// If jQuery is loaded...
if (window.jQuery) {
// ...init
init();
} else {
// Otherwise, load it and init when it's loaded
var script = document.createElement("script");
// ^^^−−−−−−−−− prevents the horror of implicit globals
script.onload = init; // <=== Calls `init` when the script successfully loads
script.src = "https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js";
document.head.appendChild(script);
}
})();