最近在開發(fā)項(xiàng)目的時(shí)候,要求實(shí)現(xiàn)對(duì)地市的權(quán)限選擇,使用checkbox進(jìn)行實(shí)現(xiàn)。
于是在網(wǎng)上先找了一下關(guān)于Struts對(duì)于html:checkbox進(jìn)行的各種控制,可是很失望,網(wǎng)上說的無非都是
使用各種隱藏域來進(jìn)行賦值或者控制的,而且在使用js對(duì)checkbox的狀態(tài)判斷的時(shí)候,采用的方法都很麻煩,這里就不一一列舉了。
進(jìn)入正題;
開始的時(shí)候發(fā)現(xiàn)html:checkbox下沒有checked屬性,當(dāng)然對(duì)于它的name和id屬性還是由于已經(jīng)發(fā)生實(shí)質(zhì)意義上的轉(zhuǎn)變而不能采用getElementById來進(jìn)行獲取。所以一度陷入低谷。
在網(wǎng)上找來找去也沒找到滿意答案。于是還是自己動(dòng)手親自來操作。
靜下來仔細(xì)一想,發(fā)現(xiàn)其實(shí)不管jsp頁(yè)面是由Struts標(biāo)簽來寫還是有JSTL來寫,最后都是先要生成一個(gè)html頁(yè)面。所以這樣就好辦了,因?yàn)槲覀兊?
“全選” 和 “全不選” 都是在html頁(yè)面生成之后才進(jìn)行控制的,所以這個(gè)時(shí)候只要關(guān)心已生成的HTML頁(yè)面中存在的標(biāo)簽并對(duì)其進(jìn)行控制即可。
所以可以用下面的方法進(jìn)行html:checkbox或者h(yuǎn)tml:multibox的全選控制:
-----------------------------------------------
jsp部分代碼:
<input type="checkbox" name="checkall" onclick="checkAll();" value="checkall">全選<br>
<logic:iterate id="city" name="citylist">
<html:multibox property="Area" ><bean:write
name="city" property="cityID"/></html:multibox><bean:write
name="city" property="cityName"/>
</logic:iterate>
-----------------------------------------------
其中
citylist從action中獲?。?br />
對(duì)應(yīng)action代碼:
List<City> citylist = 從數(shù)據(jù)獲取所有的城市并封裝成一個(gè)list。
request.setAttribute ("citylist ",citylist );
-----------------------------------------------
對(duì)應(yīng)City類應(yīng)該包含:
private String cityName;
private String cityID;
已經(jīng)對(duì)應(yīng)的get、set方法。
-----------------------------------------------
JS
function checkAll(){
//全選
var flag;
var area = document.getElementsByName("Area");
var len = area.length;
var chall = document.getElementsByName("checkall")[0];
if(chall.checked == true){
for(i=0;i<len;i++){
area[i].checked = "checked";
}
}
if(chall.checked != true){
for(i=0;i<len;i++){
area[i].checked = "";
}
}
}
因?yàn)檫@個(gè)時(shí)候已經(jīng)存在一個(gè)完整的html頁(yè)面,而
<html:multibox property="Area" ><bean:write name="city" property="cityID"/></html:multibox>
生成的代碼為:
<input type="checkbox" name="Area" value="ln" checked="checked">遼寧
<input type="checkbox" name="Area" value="ln/sy" checked="checked">沈陽(yáng)
<input type="checkbox" name="Area" value="ln/dl" checked="checked">大連
………………
所以可以使用
var area = document.getElementsByName("Area");
來獲取到checkbox的對(duì)象組,
然后采用循環(huán)進(jìn)行check的設(shè)置。
注意的是 document.getElementsByName("Area"); 如果獲取的是checkbox,此時(shí)返回的是一個(gè)object【】;
所以在取 全選 checkbox的checked的值的時(shí)候應(yīng)該使用:
var chall = document.getElementsByName("checkall")[0];
才能獲取到全選checkbox對(duì)象,然后再通過 chall 。checked 來判斷是否 要進(jìn)行 全選或者 全不選。
當(dāng)然通過上面的獲取對(duì)象方法則可以進(jìn)行對(duì)checkbox的其他操作。
希望這些能夠?qū)Υ蠹矣兴鶐椭?/p>
如對(duì)本文有疑問,請(qǐng)?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會(huì)為你解答?。?點(diǎn)擊進(jìn)入論壇