我有一个包含五个列表项的无序列表,每个列表项都有一个链接:
<ul> <li><a href="#">Link 1</a></li> <li><a href="#">Link 2</a></li> <li><a href="#">Link 3</a></li> <li><a href="#">Link 4</a></li> <li><a href="#">Link 5</a></li> </ul>
链接的点击功能与live()
:
$("a").live("click", function(){ ... });
此函数内部是get
请求,用于检索某些信息。
因此,当点击任何这些链接时,我希望阻止点击任何其他链接,直到get
完成为止。我认为我可以通过将点击事件与die()
取消绑定来实现此目的:
$("a").live("click", function(){ $("a").not(this).die("click"); ... });
但这不起作用。我没有收到任何错误 - 它只是不会阻止点击事件。我做错了什么?
答案 0 :(得分:3)
这里的问题是您尝试在不同的元素集上使用live
和die
。为了正常运行,您必须将live
和die
应用于相同的选择器/元素集。
$('a').live('click', function () { ... });
$('a').die(); // Ok!
$('a').each(function () {
$(this).die(); // Doesn't work.
});
听起来你只想暂时禁用它,直到特定操作完成。如果是这样,那么您可以使用handle / dontHandle开关执行此操作。
(function() {
var doHandle = true;
$('a').live('click', function() {
if (!doHandle) {
return;
}
// Don't handle any events until the 'get' is complete
doHandle = false;
doGet(this, function() {
// Call back for when the get is complete. Start handling again
doHandle = true;
});
})();