2010-11-01 44 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鏈接。