javascript - 选择器仅在 setTimeout 中找到合适的值

标签 javascript jquery css

我有一个脚本需要某个 div 的高度。

问题是 .height() jQuery 中的方法不会返回正确的值,除非它位于 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 //expected value


现在我知道浏览器多线程的事情了,计时器元素中的元素以它们自己的....尺寸运行,但我需要让这个选择器打印正确的值而不使用 setTimeout 或任何计时器函数。

附加信息:

目标 div 是绝对位置,函数本身是为了在内部内容(和高度)都设置好之后专门启动。

编辑

不是 When should I use jQuery's document.ready function? 的副本.我特别说过我不想使用 setTimeout....

编辑2

提到的afterLoad函数是 Fancybox3 js 插件的一部分。 阅读源码发现here :

afterLoad : $.noop, // When the content of a slide is done loading

由于工作限制,我不能展示太多代码,但 block 本身位于 resize() 中内部声明 afterLoad ,它在 afterLoad 结束时被调用 block

最佳答案

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

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

相关文章:

javascript - 使用数据属性计算输入字段

javascript - enquire.js 遗留支持

javascript - 如何在表中按列表示 JSON 响应

jquery - 在4.0.3 js中使用远程源时如何在Select2中设置值

jquery数据表自定义ajax客户端

javascript - jquery 从上到下滑动

javascript - datejavascript 将数值转换为时间值

php - 允许定义可编辑区域的开源 CMS

javascript - CSS 列 : both fluid and flexible in width

html - 不确定为什么我的 flexbox 元素内容没有位于中心