asp.net Javascript擷取CheckBoxList的value

來源:互聯網
上載者:User

以後我會陸續的寫出這段時間中學習到的東西,與大家一起分享。這篇文章也算是工作中的一個筆記吧,希望給遇到同樣問題的朋友,一點小小的協助。
在 開發工作中,因為要做用到CheckBoxList在用戶端用js操作,無論js怎樣調試,就是無法擷取value的值,很是鬱悶,後來Google了下,去了趟CodeProject,算是幸運的。我們在網頁上放置一下代碼: 複製代碼 代碼如下:<asp:CheckBoxList runat="server" ID="chkDemo" RepeatDirection="Horizontal" RepeatLayout="Flow"> <asp:ListItem Text="測試A" Value="A"></asp:ListItem>
<asp:ListItem Text="測試B" Value="B"></asp:ListItem>
<asp:ListItem Text="測試C" Value="C"></asp:ListItem>
<asp:ListItem Text="測試D" Value="D"></asp:ListItem>
<asp:ListItem Text="測試E" Value="E"></asp:ListItem>
</asp:CheckBoxList>

當瀏覽器呈現這段代碼後,我們再看看是什麼樣的Html指令碼:
<table id="chkDemo" border="0">
<tr><td><input id="chkDemo_0" type="checkbox" name="chkDemo$0" /><label for="chkDemo_0">測試A</label></td>
<td><input id="chkDemo_1" type="checkbox" name="chkDemo$1" /><label for="chkDemo_1">測試B</label></td>
<td><input id="chkDemo_2" type="checkbox" name="chkDemo$2" /><label for="chkDemo_2">測試C</label></td>
<td><input id="chkDemo_3" type="checkbox" name="chkDemo$3" /><label for="chkDemo_3">測試D</label></td>
<td><input id="chkDemo_4" type="checkbox" name="chkDemo$4" /><label for="chkDemo_4">測試E</label></td> </tr></table>
這段Html指令碼會因為RepeatLayout的設定有所差異,但是都有一個共同點,就是 產生的CheckBox沒有value屬性,
所以在用戶端用js是沒辦法擷取值的
為瞭解決這個問題,我們需要擴充一下CheckBoxList:這是我在CodeProject上找到的源碼,時間久了,連結就不貼了吧。 複製代碼 代碼如下:[ToolboxData("<{0}:CheckBoxListEx runat=\"server\"></{0}:CheckBoxListEx>")]
public class CheckBoxListEx : CheckBoxList,IRepeatInfoUser
{
void IRepeatInfoUser.RenderItem(ListItemType itemType, int repeatIndex, RepeatInfo repeatInfo, HtmlTextWriter writer)
{
string clientID = UniqueID + this.ClientIDSeparator + repeatIndex.ToString(NumberFormatInfo.InvariantInfo); //var

writer.WriteBeginTag("input");
writer.WriteAttribute("type", "checkbox");
writer.WriteAttribute("name", UniqueID + this.IdSeparator + repeatIndex.ToString(NumberFormatInfo.InvariantInfo));
writer.WriteAttribute("id", clientID);
writer.WriteAttribute("value", Items[repeatIndex].Value);
if (Items[repeatIndex].Selected)
writer.WriteAttribute("checked", "checked");

System.Web.UI.AttributeCollection attrs = Items[repeatIndex].Attributes;
foreach (string key in attrs.Keys)
{
writer.WriteAttribute(key, attrs[key]);
}
writer.Write("/>");
writer.Write("<label for='" + clientID + "'>");
writer.Write(Items[repeatIndex].Text);
writer.Write("</label>");

}

上邊的這段代碼是我經過修改的,與原著中有些差別:clientID的產生以及Checked屬性的添加等,我想這段代碼不需要再詳細的講解了吧。
把它編譯成單獨的類,在Toolbox上會自動出現,像使用那個正常的CheckBoxList一樣,拖動到頁面就可以了。
在用戶端,我們js取值大致如下: 複製代碼 代碼如下:<script>
function getDemoValue()
{ var els = document.getElementById("chkDemo"); var vals= ''; if (els != null) { var chks = els.getElementsByTagName("input"); for (var k = 0, len = chks.length; k < len; k++) { var chk = chks[k]; if (chk != null && chk.type == 'checkbox' && chk.checked) { vals+= ',' + chk.value; } } }
if(vals.length>1)
vals = vals.substring(1);
return vals;
}
</script>

結束

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.