jquery - 我们可以使用 jQuery `on` 来静态创建 DOM 元素吗? on(event,selector,function) 和 on(event,function) 之间有什么区别

标签 jquery jquery-on

我们可以使用 jQuery on 来静态创建 DOM 元素而不是 jQuery 点击(我知道这会起作用,但我想知道它好用吗?)

这有什么不同

$('body').on('click', '#joinSession', function(){})$('#joinSession').on('click ', function() {})

我创建了jsfiddle两种方法都给出相同的结果,这之间有什么显着差异?

HTML

<div class="container">
    <div class="controls">
        <input type="button" value="Create session" id="createSession"/>
        <input type="button" value="Join session" id="joinSession"/>
    </div>
    <div class="othersVideos"></div>
    <div class="ownVideo"></div>
</div>

Jquery 脚本

$('#createSession').on('click', function() {
    alert('test');
});

$('body').on('click', '#joinSession', function() {
    alert('testing')
});

最佳答案

$('#createSession').on('click', function() {
    alert('test');
});

这会将点击处理程序直接绑定(bind)到与选择器匹配的任何元素。如果在调用绑定(bind)时没有找到任何元素,它将不执行任何操作。

$('body').on('click', '#joinSession', function() {
    alert('testing')
});

这使用事件委托(delegate)并将点击处理程序绑定(bind)到body。每当事件冒泡到 body 时,jQuery 就会检查事件的起源位置。如果它源自与第二个参数选择器匹配的内容,它将触发处理程序。这使得事件能够绑定(bind)到可能尚不存在的元素 - 只要它们在事件触发时存在,处理程序仍将应用于它们。

几乎应该始终使用第二种语法,因为它具有性能和内存优势。为了获得最佳结果,您应该使用尽可能快 (id) 且靠近元素的选择器,而不是 body。有关事件委托(delegate)的更多信息,请查看 jqFundamentals .

关于jquery - 我们可以使用 jQuery `on` 来静态创建 DOM 元素吗? on(event,selector,function) 和 on(event,function) 之间有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17321341/

相关文章:

c# - 如何在 MVC 3 中通过 jQuery 加载传递对象数组?

javascript - 通过 javascript 添加内容文本是否有任何缺点,除了禁用 javascript 时不会显示之外?

javascript - 是否有等效于 jQuery.on 的 Firefox 插件?

jquery - 在 jquery 锤子事件中触发 off() 的正确方法

javascript - 从 Jquery 选择的插件中删除所有选择

javascript - 每次我单击“提交”时,jQuery 都会不断发布一条额外消息

jquery - 谷歌地图上的 Control 键 + 点击事件

javascript - 使用 .on() 动态加载内容时是否可以从元素获取属性?

jquery - 在 .on() 方法事件映射中使用选择器的语法?