我使用以下代码来延迟触发循环列表中的项目
var eleID = '';
$('.SlideSelect').each(function(i) {
eleID = $(this).attr('id');
$('#'+eleID).delay(800*i).trigger('click');
});
然而,延迟不起作用,只是循环。
有谁知道为什么?
var eleID = '';
$('.SlideSelect').each(function() {
eleID = $(this).attr('id');
setTimeout(function(){
$('#'+eleID).trigger('click');
}, 5000)
});
答案 0 :(得分:2)
延迟用于动画队列。如果你想延迟其他任何东西,你应该使用setTimeout。请注意使用单独的函数来捕获延迟函数中的每个值。
var eleID = '';
$('.SlideSelect').each(function(i) {
eleID = $(this).attr('id');
delayedTrigger( $('#'+eleID), 800*i );
});
function delayedTrigger(elem, delay)
{
setTimeout( function() { $(elem).trigger('click'); }, delay );
}
答案 1 :(得分:1)
只有fx methods
会对jQuerys内部队列产生隐式影响。要使用任何其他类型的方法,您明确需要调用.queue()
:
$('#'+eleID).delay(800*i).queue(function( next ) {
$(this).trigger('click');
next();
});
这应该有效。我唯一不确定的是if this
指向jQuery包装的调用集。我现在就把它留给你找。
此解决方案带来的另一个问题是ECMAscript的关闭。由于您将在循环内调用该代码,所有这些匿名函数(-contexts)将关闭eleID
变量并引用它。要解决这个问题,我们需要调用另一个上下文:
$('#'+eleID).delay(800*i).queue((function( myID ) {
return function( next ) {
$('#'+myID).trigger('click');
next();
};
}(eleID)));
答案 2 :(得分:0)
答案 3 :(得分:0)
您不能使用delay()
,因为它仅适用于效果。
$('.SlideSelect').each(function(i) {
window.setTimeout(function() {
$('#'+this.id).trigger('click');
}, 800*i)
});
答案 4 :(得分:-1)
var eleID = '';
var i=0;
$('.SlideSelect').each(function(event) {
eleID = $(this).attr('id');
$('#'+eleID).delay(800*i).trigger('click');
i++;
});