我有一个脚本,它要求某个div的高度。

问题在于,jQuery中的.height()方法不会返回正确的值,除非它位于setTimeout函数内,即使具有0的值也是如此。
所以这:

console.log("1:" + $(slides[0]).find('.slide__inner').height());
setTimeout(function(){console.log(
    "2:" + $(slides[0]).find('.slide__inner').height());}
, 0);


结果在


  1:0
  
  2:399 //期望值




现在,我知道了浏览器的多线程功能,并且计时器元素中的元素以自己的尺寸运行。但是,我需要使此选择器在不使用setTimeout或任何计时器函数的情况下输出正确的值。

附加信息:

目标div是绝对位置,该函数本身专门用于在内部内容(和高度)全部设置后启动。

编辑

这不是When should I use jQuery's document.ready function?的重复项。我专门说过,我不想使用setTimeout...。

编辑2

提到的afterLoad函数是Fancybox3 js插件的一部分。
从源中读取发现here


  afterLoad:$ .noop,//幻灯片内容加载完成后


由于工作限制,我不允许显示太多代码,但该块本身位于resize()内声明的afterLoad内,该元素在afterLoad块的末尾被调用

最佳答案

根据the documentation of the plugin you're using和您对原始问题的评论,看来可以通过使用afterShow回调而不是afterLoad来解决您的问题。打开的动画完成后,即高度查询合适时,将触发此回调。

关于javascript - 选择器仅在setTimeout内部找到合适的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46760571/

10-12 00:20
查看更多