2011-12-17 36 views
1

以下代碼在選中所有複選框時工作正常,但它使用按鈕的輸入類型。我怎麼能把它改成一個錨點(例如像鏈接)而不是輸入類型的按鈕。一旦選擇全部,這需要更新爲UnCheck All。我曾嘗試使用innerHTML將其放置在DIV中,但尚未成功。我會很感激任何像往常一樣的幫助。正在更新全選/取消全選複選框

非常感謝

<script language="JavaScript"> 
function Check(chk) 
{ 
if(document.myform.Check_All.value=="Check All"){ 
for (i = 0; i < chk.length; i++) 
chk[i].checked = true ; 
document.myform.Check_All.value="UnCheck All"; 
}else{ 

for (i = 0; i < chk.length; i++) 
chk[i].checked = false ; 
document.myform.Check_All.value="Check All"; 
} 
} 

// End --> 
</script> 
<form name="myform" action="checkboxes.asp" method="post"> 


<input type="checkbox" name="check_list" value="1">apple<br> 
<input type="checkbox" name="check_list" value="2">banana<br> 
<input type="checkbox" name="check_list" value="3">pear<br> 

<input type="button" name="Check_All" value="Check All" onClick="Check(document.myform.check_list)"> 



</form> 

回答

1

我首先想到了一個快速的答案,但那麼我注意到這會吸得很糟糕 因爲如果有人手動勾選複選框,這完全是braindead。

<form name="myform" action="checkboxes.asp" method="post"> 
<input type="checkbox" name="check_list" value="1">apple<br> 
<input type="checkbox" name="check_list" value="2">banana<br> 
<input type="checkbox" name="check_list" value="3">pear<br> 
</form> 

<div id="checker">Check All</div> 

<script type ="text/javascript"> 
//The toggle code for the div itself 
$("#checker").bind("click", function() { 
    var toggleState = !! jQuery.data(this, "togglestate"); 

    $(document.myform.check_list).each(function() { 
    this.checked = !toggleState; 
    }); 


    $(this).text(toggleState ? "Check All" : "UnCheck All"); 
    jQuery.data(this, "togglestate", !toggleState); 
}); 

//Keep track of manual ticking of the checkboxes 
//- if all checkboxes are ticked manually, change to uncheck all 
//- if all checkboxes are unticked manualy, change to check all 

$(document.myform).delegate("input[name=check_list]", "change", function() { 
    var curState, prevState, fullStateChange = true; 

    //Iterate through the checkboxes to see if all are unticked or if all are ticked 
    $(document.myform.check_list).each(function() { 
    curState = this.checked; 

    if (prevState != null && prevState !== curState) { 
     fullStateChange = false; 
    } 

    prevState = curState; 
    }); 

    //Return as some were ticked and some were not 
    if (!fullStateChange) { 
    return; 
    } 

    $("#checker").data("togglestate", curState).text(!curState ? "Check All" : "UnCheck All"); 

}); 

//React to initial state of the checkbuttons 
$(document.myform.check_list).trigger("change"); 
</script> 

演示

http://jsfiddle.net/rBaUM/2/

+0

這太棒了!我有一個問題,說如果我有多個領域需要這個複選框,我怎麼能設置字段的名稱(在這個例子中它的check_list)工作不同複選框?這可以節省我重寫每個複選框的代碼(指定不同的div - checker1 ,checker2等),並使用基本編程概念(如循環,數組和對象)輸入名稱 – skippy 2011-12-18 00:25:32

+0

@skippy。 :P太累了重構它:( – Esailija 2011-12-18 00:31:38

+0

哦,好吧,道歉我很新的jquery!我會想出它。謝謝你的幫助無論如何 – skippy 2011-12-18 00:35:41

0

我不知道如果這是你問的是什麼,但使用非按鈕就像

<div onclick="Check(document.myform.check_list)">Check All</div> 
+0

感謝您的回覆邁克爾。是的,這與我之後的接近,但只要你點擊div(標籤爲「全部檢查」,我希望這個文本然後更新爲「UnCheck All」(或類似的東西)),我是否需要使用InnerHTML屬性來改變javascript函數中的內容嗎?此外,作爲div中的純文本,用戶不知道你是否可以選擇這個,這就是爲什麼我要放置在HTML鏈接錨點中。放置在 skippy 2011-12-17 22:08:08

+0

是的,您需要使用'div'對象的'.innerHTML'來更新內容。您也可以使用'a'作爲此目的,但您也可以使用'div'或者任何你想使用的元素 – 2011-12-17 22:17:59

1
<script language="JavaScript"> 
function Check(chk){ 
var checkedVal = document.getElementById("Check_All"); 

if(checkedVal.innerHTML=="Check All"){ 
    for (i = 0; i < chk.length; i++) 
    chk[i].checked = true ; 
    checkedVal.innerHTML = "UnCheck All"; 
}else{ 
    for (i = 0; i < chk.length; i++) 
    chk[i].checked = false ; 
    checkedVal.innerHTML = "Check All"; 
} 
} 
</script> 
<form name="myform" action="checkboxes.asp" method="post"> 

<input type="checkbox" name="check_list" value="1">apple<br> 
<input type="checkbox" name="check_list" value="2">banana<br> 
<input type="checkbox" name="check_list" value="3">pear<br> 

<a href="javascript:;" id="Check_All" onClick="Check(document.myform.check_list); return false">Check All</a> 
</form> 
+0

這正是我之後的事情。我很容易在我的腳本中使用這個函數,並且爲不同的使用多個複選框的字段調用這個函數。 innerHTML可以在不同的瀏覽器上工作嗎?感謝您的幫助 – skippy 2011-12-18 00:29:47

+0

@skippy,許多瀏覽器完全支持innerHTML屬性。 – david 2011-12-18 16:35:45

相關問題