我正在尝试将jQuery对象传入setTimout
函数,但无济于事。
这就是我现在所拥有的 - 它的工作原理:
var checkIfElementsExist = function () {
var elements = $('.myElements');
if (elements.length) {
console.log('els are here!');
$(window.document).trigger('elementsExist', [elements]);
} else {
console.log('nope, check it again');
setTimeout(checkIfElementsExist, 500);
}
}
checkIfElementsExist();
但是一旦我从函数中取出$('.myElements')
,并尝试将其作为参数传递给函数,elements.length
总是返回零。
var checkIfElementsExist = function (elements) {
if (elements.length) {
console.log('els are here!');
$(window.document).trigger('elementsExist', [elements]);
} else {
console.log('nope, check it again');
setTimeout(checkIfElementsExist, 500);
}
}
checkIfElementsExist($('.myElements'));
我读到你不能将参数传递给setTimeout
函数,所以我试图将元素作为附加参数传递给setTimeout
调用,例如setTimout(checkIfElementsExist, 500, elements);
,但仍然没有。
更新:
我已经完成了Pointy提到的更新,但它似乎仍无效。这是JSFIDDLE以更好地说明问题。
答案 0 :(得分:5)
而不是
setTimeout(checkIfElementsExist, 500);
你可以这样做:
setTimeout(function( ) { checkIfElementsExist(".myElements"); }, 500);
通过在实际函数周围包装一个匿名函数,你可以传入你想要的任何参数。
答案 1 :(得分:1)
执行$('.myElements')
遍历DOM并返回包含class="myElements"
的所有元素的数组。
最初传递$('.myElements')
时,您只是第一次构建该数组。以下处理时间您没有传递任何参数。
这里真正的问题是为什么在加载脚本时没有加载.myElements
?它们是动态创建的吗?如果没有,您的脚本应该包含在$(document).ready(function(){ // ... code here })
中,以等待加载整个页面。