使用 Asp.Net 的 CheckBoxList,只要你設定好 DataSource 之後,.Net 會自動幫你把所有資料呈現出來,畫面如下所示:
.Net 所產生的網頁原始碼為:
<table id="cb"> <tr> <td><input id="cb_0" type="checkbox" name="cb$0" value="1" /> <label for="cb_0">paladin</label></td> </tr><tr> <td><input id="cb_1" type="checkbox" name="cb$1" value="2" /> <label for="cb_1">ltt</label></td> </tr><tr> <td><input id="cb_2" type="checkbox" name="cb$2" value="3" /> <label for="cb_2">lee</label></td> </tr> </table>
目前的需求,是要將被勾選項目的文字顯示出來,因為每一個項目都已經被指定了預設的ID,但又不想透過 Server 端去處理以避免觸發 PostBack,所以希望只從前端用 javascript 就能取出有被勾選的項目文字。依上述的 HTML 原始碼,如果要從
<input id="cb_0" type="checkbox" name="cb$0" value="1" />
裡面去取得有被勾選的文字「paladin」真的還有點困難,因為 .Net 所產生的 Html Code 根本就沒有把 「paladin」放到 input 標籤裡。這時,自己為 input 標籤加上自訂的屬性或許是個可行的方法,所以在 CheckBoxList 的 PreRender 事件裡,把項目文字的內容也給他加上去。但是,之後的發展,更是令人意外啊~
protected void cb_PreRender(object sender, EventArgs e) { foreach (ListItem li in cb.Items) { li.Attributes["text"] = li.Text; } }
Html Code:
<table id="cb"> <tr> <td><span text="paladin"><input id="cb_0" type="checkbox" name="cb$0" value="1" /><label for="cb_0">paladin</label></span></td> </tr><tr> <td><span text="ltt"><input id="cb_1" type="checkbox" name="cb$1" value="2" /><label for="cb_1">ltt</label></span></td> </tr><tr> <td><span text="lee"><input id="cb_2" type="checkbox" name="cb$2" value="3" /><label for="cb_2">lee</label></span></td> </tr> </table>
原先每個 checkbox 相關的 Html Code,現在變成最外層被包了一個 <span> 標籤,而剛剛所加的項目名稱也是被產生在這個<span> 標籤裡。
<span text="paladin">**原先的 checkbox html**</span>
依據上面新的 Html Code,要取出被勾選項目,則可以用 jQuery 的
$("input[type=checkbox]:checked").each(...); 來完成;
[參考]JQuery 取得 checkbox 群組內被選取的項目
至於要取得項目名稱,則需透過 jquery 的 .parent( ) ,來取得最外一層 <span> 標籤裡的內容了。
於是,我在前端 .aspx 頁面定一了一段 JavaScript Function:
<script> function ShowData() { var str = ""; $("input[type=checkbox]:checked").each(function (i) { str = str + $(this).parent().attr("text") + ","; }); alert(str); } </script>ShowData( ) 主要目的,就是取得目前頁面上所有被勾選的 checkbox ,並將他們父親的 text 屬性內容存到 str 變數中,最後並將結果顯示出來。
最後,為了方便測試,替每個 checkbox 加入 onclick 事件:
<script> $(function () { $("input[type=checkbox]").click(function () { ShowData(); }); }); </script>
經過這番調整後,就可以正確顯示想要的內容了。
[補充 20120706]
也可以透過 .next 來處理這問題。可以參考:
透過 jQuery 取得 Asp.Net 裡 CheckBoxList 被勾選的文字(二)
@~@剛好GOOGLE 到 謝謝~正被此捆擾
回覆刪除不客氣...下次可能換我 Google 到你那邊去喔
回覆刪除