在jQuery中使用out参数的live函数

时间:2011-10-17 20:42:37

标签: javascript jquery

我想通过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");

我该如何解决?

3 个答案:

答案 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返回的那些)。