2009-12-14 276 views
0

这可能是推动jquery的极限。jQuery如何让一个事件触发一次只触发一次div

我想要触发live()事件。但我只想让它使用one()事件触发一次。

目前我有代码打击。我如何限制这只能被调用一次。

$(".sub-content").live('click', function() { 
     var id = this.id; 
     $.get("InfoRetrieve", { theid:id }, function(data) { addContent(data, id) }); 
    }); 

回答

1

有几种方法可以做到这一点。首先,你可以只使用一个标记:

<div class="sub-content not-loaded">...</div> 

有:

$("div.sub-content.not-loaded").live("click", function() { 
    $(this).removeClass("not-loaded"); 
    ... 
}); 

很明显,你可以做到这一点的其他方式,以及(添加一个类来标记它已经加载)。我不是100%以上将与live()正确处理这种情况下:

$("div.sub-content.not-loaded").live("click", function() { 
    if ($(this).hasClass("not-loaded")) { 
    $(this).removeClass("not-loaded"); 
    ... 
    } 
}); 

会工作。

或者,您可以解除绑定该事件。

$("div.sub-content").click(load_content); 

function load_content() { 
    $(this).unbind("click", load_content); 
    ... 
} 

我不是100%肯定会与不过live()(如live()可能只是重新绑定)工作。

+0

它似乎并没有在这种情况下工作,但我绝对学到了东西,无论如何,谢谢。 – Ankur 2009-12-15 02:15:39

0

可以使用die方法:

$(".sub-content").live('click', function() { 
    $(this).die('click'); 
    var id = this.id; 
    $.get("InfoRetrieve", { theid:id }, function(data) { addContent(data, id) }); 
}); 

我从来没有测试它虽然。

+0

这将删除所有点击事件。 OP只想确保每个div只加载一次,这不完全相同。你的方式会杀死所有的点击事件,当第一个div被点击,所以没有人可以点击。 – cletus 2009-12-14 09:25:06