使用函数和选择器时从.live迁移到.on

时间:2013-05-18 15:49:53

标签: jquery

可能是一个简单的答案,但我不明白jQuery的原理足以解决它。

我有这个:

$(".remove", document.getElementById(itemsAreaId)).live("click", function(){

我要迁移到.on()

我试过这个

var selectedEls = $(".remove", document.getElementById(itemsAreaId));
   $(document).on('click',selectedEls, function(e){

但它不起作用。

任何人解释我做错了什么?

如果可能的话,为什么我的解决方案不起作用,所以我能理解。

非常感谢,

2 个答案:

答案 0 :(得分:5)

on() must be a string的可选选择器。你正在为它提供一个jQuery对象(selectedEls)。

相反,只需直接使用字符串选择器.remove即可。不是定位document,而是使用itemsAreaId;

$('#' + itemsAreaId).on('click', '.remove', function ());

如果你想定位document,你可以使用后代选择器以及itemsAreaId.remove,就像这样;

$(document).on('click', '#' + itemsAreaId + ' .remove', function ());

...但最好尽可能靠近源处理处理程序,因此首选处理程序。

答案 1 :(得分:2)

$(document.getElementById(itemsAreaId)).on('click', '.remove', function(e){}

<强>解释

如您所知,jQuery可以接受字符串甚至DOM元素作为其对象的构造函数,因此$(document.getElementById(itemsAreaId))将为您提供对元素的最快和最近的访问权限。 .on('click', '.remove', function(e) {} 当点击带有remove(附加了itemsAreaId函数的)元素中具有类on的任何元素时,此函数将调用函数(e)。

使用$(document)会在每次用户点击时检查您的活动;使用$('#' + itemsAreaId)的方式相同(我们谈论的是毫秒)因为jQuery必须解析字符串以检索DOM元素。