我认为这与个人喜好和代码可读性有关。
就更强大的功能而言.on,您可以委托事件,而快捷方式始终直接对元素进行操作。例如,即使是在使用 ajax 或其他方式添加的元素,也$('body').on('click', '.button', function(){});适用于每个元素。.button虽然快捷方式无法做到这$('.button').click(function(){});一点,但这是添加侦听.button器且不具有委托功能的唯一方法,因此.button稍后添加的元素将没有此绑定。
多个元素上的直接未委托事件(如快捷方式)的效率也略低于父对象上的委托事件。例如:假设.button页面上有 15 个元素,$('.button').click(...将遍历所有 15 个元素并为每个元素添加一个事件侦听器;然而$('#parentElem').on('click', '.button', ...,将简单地将单个事件侦听器附加到#parentElem对目标的检查,因此一个附加和一个侦听器,而不是一个循环和 15 个侦听器。
最后,.on它的优点是允许您从多个事件中将一个函数附加到一个元素,这是使用快捷方式无法实现的,例如:$('.button').on('click mouseover keyup', ...该函数将通过单击、鼠标悬停或按键触发!
.button让我们再次说在一个名为 div 中有 15 个元素#parent
快捷方式处理程序:
$('.button').click(turnRed);
$('.button').mouseover(turnRed);
$('.button').keyup(turnRed);
function turnRed(){
$(this).css('color','red');
}
- 创建了 4 个 jQuery 对象(是的,我知道您可以将其缓存到 2 个对象,但这是一个示例)
- 3 个元素循环,每个循环 15 个,因此 jQuery 在这里点击元素 45 次并附加监听器
- 总共 45 个事件监听器
- 添加到场景中的未来
.button元素不会turnRed
.on处理程序:
$('#parent').on('click mouseover keyup', '.button', turnRed);
function turnRed(){
$(this).css('color','red');
}
- 创建了 2 个 jQuery 对象
- 没有元素循环,所以 jQuery 一次点击元素
- 总共 3 个事件监听器
- 未来
.button添加到场景中的元素实际上会turnRed
这里.on明显有优势
如果您的情况比这更简单,那么 的优势.on可能不会对您产生影响,并且该快捷方式可能是首选,因为它更具可读性。
$('#button').click(...几乎与$('#button').on('click', ...(请参阅@Fabrício Matté 的回答)相同,如果我们只想为一个事件添加一个侦听器,那么.on' 的力量是一个有争议的问题。
就个人而言,因为有时我希望.on我总是使用的优势.on只是为了保持一致。