我有以下JavaScript函数。
function ready(interval, last_wait, el, callback) {
if (jQuery(el).length) {
console.log("Element ready: " + el)
setTimeout(function () {
callback(jQuery(el));
}, last_wait);
} else {
console.log("Waiting element: " + el)
setTimeout(function () {
ready(interval, last_wait, el, callback);
}, interval);
}
};
它基本上是等待DOM元素出现。如果不是,则等待更多interval
毫秒。我想要的是添加一个timeout
参数。如果函数总共等待timeout
毫秒,而DOM元素仍然没有出现,那么什么也不做,停止等待并返回。我不能让它工作,因为函数的递归性质。我也考虑过使用全局变量,但这似乎不是正确的方法。希望有人能给我指明正确的方向。
发布于 2019-12-12 09:28:01
这对我很管用
如果您增加stopAfter,代码将运行到结论
var tId, stopAfter = 3
const cb = el => el.html("Callback called");
function ready(interval, last_wait, el, callback) {
if (stopAfter === 0) {
clearInterval(tId);
return;
}
if ($(el).length) {
clearInterval(tId);
console.log("Element ready: " + el)
setTimeout(function() { callback($(el)); }, last_wait);
return;
}
console.log("Waiting element: " + el)
if (!tId) tId = setInterval(function() {
stopAfter--;
ready(interval, last_wait, el, callback);
}, interval);
};
// testing the above
ready(1000,2000,"#div1",cb)
setTimeout(function() {
$("body").append(`<div id="div1">Div1</div>`) }
,5000);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
https://stackoverflow.com/questions/59301151
复制相似问题