不确定以下代码无效的原因。如果我将.on()
更改为.live()
它可以正常工作,但现场活动仍然存在,因为这样会出现在页面上和页面之外的情况,而不是一次,live会在每次点击时继续添加到事件行。我觉得短而瘦,为什么这不会开火?
$("#" + old_n).on('mousedown', function(evt) {
console.log(old_n);
if($(el).data('clickphase')) {
return true;
}
$("#" + $.contextmenu).remove();
$(el).data('served', true);
if(typeof array_of_a[a_index][1] == 'function') {
array_of_a[a_index][1](evt, el);
}
// console.log(array_of_a[a_index]);
// array_of_a[a_index][1](evt, el);
$(el).removeData('served');
});
old_n
是点击的当前<li>
的ID,也有hover
个事件,但这不应该破坏mousedown事件吗?
答案 0 :(得分:3)
$("#" + old_n).on('mousedown', function(evt) {
仅在呈现页面时存在old_n
时才有效。这是一个直接绑定的事件,与
$("#" + old_n).bind('mousedown', function(evt) {
您需要委派事件:
$(document).on("mousedown", "#" + old_n, function(evt) {
这将导致文档中任何位置的所有mousedown事件被jQuery“监听”,如果任何来自与old_n
的selector-id相匹配的元素 - 则事件处理程序将触发。
当然,在文档中的任何地方收听每个mousedown事件都有点浪费。如果你知道这个元素只会存在于id为foo
的div中(并且在呈现页面时存在foo),那么为什么不只是监听事件即将到来foo
$("#foo").on("mousedown", "#" + old_n, function(evt) {
答案 1 :(得分:1)
答案 2 :(得分:1)
on
不是live
的替代品。请尝试在列表项的ul
级别进行监控。这更有效,并且on
的好处。
$('ul').on('click', 'li', function() {
//get clicked list item's id
var id = $('this').prop('id');
});
由于您正在ul
级别进行监控,因此您需要从列表项中检索所需信息。