【问题标题】:How to: jQuery do something, when all vars are true?如何:当所有变量都为真时,jQuery 做某事?
【发布时间】:2013-05-03 05:57:42
【问题描述】:

我遇到了解决以下 jQuery“问题”的问题:

以下代码退出四次。当var blk_img1_ready, var blk_imgX_ready1/true 时,我想执行一个功能。但前提是他们是true 在一起。完成的时间仍然未知。

(我搜索了trigger()bind()但不是很明白,因为没有官方事件/触发器)

var elems1 = $('#balken1 .blk_img').find('*'), count1 = elems1.length;

elems1.each( function(i) {

    blk_img1++;
    $(this).attr('id','blk1-'+blk_img1);
    if(blk_img1==1)
    {
        $(this).css('display','block');
    }

    if (!--count1) blk_img1_ready=1;
});

希望有人可以帮助我度过难关。 谢谢!

【问题讨论】:

  • 问几个问题,我可以帮助你,你到底在检查什么?你的意思是你想在.each() 函数完成后触发一个事件?
  • @Joe 没错。如果所有 (4 .each() ) 都准备好了,我想触发一个事件
  • .each() 循环中显示的代码都是同步的, 这意味着在.each() 完成之前,您在它之后放置的任何代码都不会运行。因此,如果您只是将四个循环一个接一个地放置,您可以在第四个循环之后立即调用您的另一个函数。你试过吗?
  • @Joe 希望有别的东西,而不是在一个间隔内触发一个事件,如果所有变量都为真,则重置间隔。
  • 是的,您可以使用setInterval() 来监控变量的值,但您不需要这样做,因为您没有显示任何异步代码。您使用.each() 循环显示的代码是如何调用的?

标签: jquery variables triggers bind each


【解决方案1】:

尝试使用:

var elements = $('#balken1 .blk_img').find('*');

elements.each( function(i) {
    $(this).attr('id','blk1-'+i).css('display','block');
});

// run your other code here    

要将第一个元素设置为display:block,请使用:

elements.each( function(i) {
    $(this).attr('id','blk1-'+i);
}).first().css('display','block');

【讨论】:

  • 但是显示的.each() 肯定会在.promise() 语句到达之前完成,所以这不是让它变得多余吗?
  • 好的。顺便说一句,很好地展示了如何将 OP 的 .each() 减少到一行。
  • 我现在去看看。 (你会讨厌我发布洞代码^^)。是的,您可以通过这种方式将其减少为一行,但前提是您要将所有元素设置为显示为 block 而不仅仅是第一个。
  • 到目前为止还好 :D ... 为什么我毕竟要求这个 each() 我尝试使用类似 $('#blk1-1').css('height','1000px') 的东西,但该元素没有任何反应。所以我认为它们不完整,或者在 DOM 中还没有准备好。
  • 他们是img。在接下来的步骤中,我想开始一个小幻灯片。图像从 ajax(php 文件)调用,并通过 append 设置为父 div
猜你喜欢
  • 2022-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-18
  • 1970-01-01
  • 2016-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多