我想通过jQuery选择一些在加载页面后添加的项目,所以我想使用live()
函数。我之前使用它来点击如下代码:
$("selector").live('click')
但现在我想在另一个功能中使用它。
但它不能用于论证,如live()
例如,跟随代码将提醒测试(工作)
var pos_eq=Math.abs($('.myList').css("left").replace("px","")/$('.myList').children('li').eq(0).css('width').replace("px","")) + 1;
alert("test");
但这不会。
var pos_eq=Math.abs($('.myList').live().css("left").replace("px","")/$('.myList').live().children('li').eq(0).css('width').replace("px","")) + 1;
alert("test");
我该如何解决?
答案 0 :(得分:1)
你想要一个功能,而不是一个变量。在将元素添加到页面后,您似乎试图使pos_eq
保持最新状态。使用JavaScript时,无法通过您尝试执行的方式更改DOM时进行变量自动更新。你可以做的是使用函数而不是变量。这样,无论何时访问该值,您都会获得最新值,因为它是按需计算的:
function pos_eq() {
var list = $('.myList');
var left = parseInt(list.css("left"));
var width = parseInt(list.children('li').eq(0).css('width'));
return Math.abs(left / width) + 1;
}
我将代码分解为多个语句以使其更具可读性。你可以像使用变量一样使用这个函数,而是在末尾添加parens来调用函数:
<击> alert(pos_eq);
击>
alert(pos_eq());
答案 1 :(得分:0)
要在需要时获取一组对象,只需执行$("selector")
。那将在那时进行查询并获取对象集。无需使用.live()来查询页面上的对象。无论对象是原始页面的一部分还是以后动态添加都无关紧要。当您执行$("selector")
时,它将搜索当前页面的内容,并获取当前页面中与选择器匹配的对象。
没有办法进行实时选择器查询并保存它并让它自动更新到jQuery或我知道的任何其他库中。使用动态页面解决该问题的方法是,只需在需要当前结果时执行新查询。
答案 2 :(得分:0)
live()
的描述是:为当前和未来与当前选择器匹配的所有元素附加事件处理程序。它不会为您提供实时节点列表尽管它的名字。据我所知,jQuery没有任何返回实时节点列表的方法(例如getElementsByTagName
返回的那些)。