最近着手一個項目用到了服務器空間checkboxlist ,使用起來是方便,可以想要從js獲取值就稍微麻煩點了,google后找到了如下方法。
CheckboxList是服務器控件,綁定數據容易,服務器端獲取選中值也容易。但是生成的靜態頁面居然沒有ListItem的Value值,所以默認情況下用js在頁面中是取不到ListItem的值的。至於為什么不顯示value值,我也不清楚,本篇給出一個用jQuery獲取checkboxlist值的方法。
先看看原始的頁面html代碼:
<asp:CheckBoxList runat="server" ID="listTest">
</asp:CheckBoxList>
<input type="button" id="btnShow" value="顯示選中值" />
下邊我們綁定checkboxlist,代碼如下:
if (dt != null && dt.Rows.Count > 0)
{
foreach (DataRow dr in dt.Rows)
{
//分別為text值、value值
listTest.Items.Add(new ListItem(dr["Title"].ToString(), dr["ID"].ToString()));
}
}
頁面中生成的html代碼如下:
<table id="listTest" border="0">
<tr>
<td>
<input id="listTest_0" type="checkbox" name="listTest$0" />
<label for="listTest_0">基於jQuery的一個震動效果</label>
</td>
</tr>
<tr>
<td><input id="listTest_1" type="checkbox" name="listTest$1" />
<label for="listTest_1">使用css的overflow屬性改變縮略圖大小</label>
</td>
</tr>
</table>
可以看出checkboxlist轉換為一個表格的形式,並且其中沒有value值。label中的值,即為text值。當點擊它時,也可以選中checkbox,這里在選checkbox時提高了用戶體驗。
下邊進入我們的處理過程,首先,在綁定checkboxlist時,為ListItem每個對象添加一個alt屬性,值保存對應的value值,代碼如下:
if (dt != null && dt.Rows.Count > 0)
{
foreach (DataRow dr in dt.Rows)
{
//分別為text值、value值
listTest.Items.Add(new ListItem(dr["Title"].ToString(), dr["ID"].ToString()));
}
//為ListItem對象添加alt屬性,值保存value值
foreach (ListItem li in listTest.Items)
{
li.Attributes.Add("alt", li.Value);
}
}
現在,生成的html代碼如下:
<table id="Table1" border="0">
<tr>
<td>
<span alt="400"><input id="listTest_0" type="checkbox" name="listTest$0" />
<label for="listTest_0">基於jQuery的一個震動效果</label></span>
</td>
</tr>
<tr>
<td><span alt="398"><input id="listTest_1" type="checkbox" name="listTest$1" />
<label for="listTest_1">使用css的overflow屬性改變縮略圖大小</label></span>
</td>
</tr>
</table>
從上邊可以看出,多了一個span標簽,里邊alt的值即為我們需要的value值。使用下邊的jQuery代碼即可獲得:
$(document).ready(function() {
$("#btnShow").click(function() {
var valuelist = ""; //保存checkbox選中值
//遍歷name以listTest開頭的checkbox
$("input[name^='listTest']").each(function() {
if (this.checked) {
//$(this):當前checkbox對象;
//$(this).parent("span"):checkbox父級span對象
valuelist += $(this).parent("span").attr("alt") + ",";
}
});
if (valuelist.length > 0) {
//得到選中的checkbox值序列,結果為400,398
valuelist = valuelist.substring(0, valuelist.length - 1);
}
});
});