在外部JS执行后加载JavaScript
Loading your JavaScript after an external JS get executed
我遇到了一个有点棘手的问题,我正试图将一行简单的JQuery代码addClass
应用于具有class pop-up
的div
但问题是pop_up
类在jQuery(document).ready(function($){});
之后是不可访问的
这个类实际上是从外部JS
和pop_up
功能中添加的也是从外部JS
添加的,所以我想知道
如何在外部JS执行后使用JQuery添加类,以便使用找到pop_up类
$('.pop_up');
我尝试过的:
jQuery(document).ready(function($) {
$('.pop_up').addClass('importantRule');
$('.pop_up').toggleClass('importantRule');
});
这是不起作用的,因为外部JS
以某种方式在.ready
之后添加了类,所以如果您试图打印出$('.pop_up')
,它将是未定义的。
我还尝试使用div.pop_up
的常量类容器来查找类,如下所示:
$('div.element').find('.pop_up').addClass('importantRule');
这也不起作用,我知道事实上,问题在于调用.ready
中的函数,因为外部JS
在它之后是如何执行的,所以
这附近有吗
如果没有,是否有方法检测所有外部JS文件是否已准备好并加载
您可以在一个页面中多次使用$(document).ready()。代码将按其出现的顺序运行。
您可以对代码使用$(window).load()
事件,因为这发生在页面完全加载并且各种$(document).ready()
处理程序中的所有代码都已运行完毕之后。
$(window).load(function(){
//your code here
});
一种方法是使用setTimeout
检查:-
function checkForElement() {
setTimeout(function() {
if ($('.pop_up').length) {
$('.pop_up').addClass('importantRule');
} else {
checkForElement();
}
}, 100);
}
checkForElement();
这将等待100毫秒,然后进行检查。如果它不在那里,那么它将一次又一次地等待,等等。
您遇到了比赛条件。如果外部脚本首先完成运行,那么您的代码就会工作,但如果您的代码首先完成,那么它就会中断。
你可以像Satej S在评论中建议的那样绕过它,并给出一个合理的超时,以确保外部脚本完成运行,然后在超时后运行你的脚本。
setTimeout(function(){ doSomething(); }, 3000);
更好的解决方案是使用外部脚本的回调(你能编辑外部脚本吗?)。这样,外部脚本一结束,就会调用一个将开始工作的内部函数。
为了避免大多数其他答案所建议的超时,我建议您尝试在脚本include中添加"defer"标记。这样,试图添加类"importantRule"的脚本将等待,直到所有其他脚本都已加载并执行。
此外,我发现这个问题非常相似加载并执行脚本顺序
希望这能有所帮助!感谢
- ADF:有条件地加载javascript资源
- .load()函数赢得't加载javascript
- Gmaps搜索和kmz加载javascript
- 页面显示前加载Javascript警报
- 依赖于缓慢加载javascript的UI
- 在外部JS执行后加载JavaScript
- 在WordPress站点中加载jquery.js后加载javascript代码
- 图像未加载javascript、html、angular、imdb-api
- 加载 JavaScript 取决于以前异步加载的 JavaScript
- 预加载Javascript音频以在脚本中播放
- 无法加载Javascript错误XMLHttpRequest
- AJAX JSF请求后重新加载Javascript
- Rails Assets Pipeline从控制器和方法加载JavaScript
- 使用Require.js按照依赖关系的顺序加载JavaScript
- 正在等待加载文件(加载JavaScript)
- 仅在需要时加载javascript函数
- 直接导航到chrome中的页面时未加载Javascript脚本
- 异步加载Javascript
- IE7 未加载 JavaScript 文件
- 从框架中的函数异步加载 Javascript