我想请教一个问题,就是创建一个很复杂的元素,浏览器渲染需要2秒,然后绑定事件,绑定的事件是否会生效?
$(document.body).append('<div id="test"></div>')
$('#test').on('click',function(){}) // 此处代码会不会因为 ‘test’元素过于复杂,浏览器没渲染完成,然后就给元素绑定了事件,造成事件绑定不成功
我想请教一个问题,就是创建一个很复杂的元素,浏览器渲染需要2秒,然后绑定事件,绑定的事件是否会生效?
$(document.body).append('<div id="test"></div>')
$('#test').on('click',function(){}) // 此处代码会不会因为 ‘test’元素过于复杂,浏览器没渲染完成,然后就给元素绑定了事件,造成事件绑定不成功
理论上不会,因为渲染过程会阻塞 JS 执行,所以绑定事件时,DOM 已经就位了,就可以正常绑定。
当然,也可以利用事件冒泡的特性,在上层节点侦听事件。通常来说,更推荐这种做法。
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
我建议通过
createElement
来创建元素,然后通过addEventListener
绑定事件,这样在还没append
到页面之前,也就是还未渲染到页面就可以绑定事件了