2010-11-01 45 views
2

我现在有这个权利:jQuery的:的onclick,变真亦假

$('#markAll').live('click', function() { 
checkAll(true, $('.cbPick')); 
$('#markAll').text(""); 
$('#markAll').prepend("<strong>Unmark all</strong>"); 
}); 

当我按下#markAll,它标志着与.cbPick每复选框,然后从(以前的“马克改变文本全部“)到”取消标记“。现在,如果再次按“取消标记”,则不会发生任何事情。我希望如果你点击“取消标记全部”,那么它应该这样做:

checkAll(false, $('.cbPick')); 

我该怎么做?

回答

2
var marked = false; 
$('#markAll').live('click', function() { 
    marked = (marked)? false: true; 
    checkAll(marked, $('.cbPick')); 
    $('#markAll').text(""); 
    $('#markAll').prepend("<strong>Unmark all</strong>"); 
}); 
+2

您忘记更改为标记。现在它工作正常。虽然当我按无标记我也想要它说再次“标记所有”。 – Johnson 2010-11-01 16:30:12

+0

谢谢,改变了 – infinity 2010-11-01 16:33:10

1

你可以尝试像以下:

$('#markAll').live('click', function() { 
    checkAll(true, $('.cbPick')); 
    $('#markAll').text(""); 
    var unmarkAll = $('<strong>Unmark all</strong>'); 
    unmarkall.click(function(){ checkAll(false, $('.cbPick')); }); 
    $('#markAll').prepend(unmarkall); 
}); 

这只是创建新的“取消所有标记”作为一个jQuery对象,并预先考虑到markall对象之前增加了点击功能吧。

这可能仍然会导致问题,因为markall事件和unmarkall事件会同时触发,因为unmarkall对象被预置在markall对象内。您最好使用.before函数而不是.prepend。然后隐藏markall链接。