今天有個需求,功能如上圖,可讓User任意勾選所需項目,且後方可輸入所需數量。
額外希望可達到的功能需求如下:
- 項目未勾選時,後方為不可輸入狀態,且預設值為0。
- 項目勾選後,後方即改變狀態為可輸入,且數量預設為1。
- 數量欄位只可輸入數字。
- 如項目已被勾選,則數量不可為0。
- 如項目已被勾選,則需求欄位不可為空。
上方輸入表單,使用ListView實作,實際aspx頁面如下:
<table id='ItemsTable'> <asp:ListView ID="ListView2" runat="server"> <ItemTemplate> <tr> <td valign="top"> <asp:CheckBox ID="cbitem" runat="server" Text='<%# Eval("ItemName") %>' /> <asp:Label ID="Label4" runat="server" Text="( 需求數量:" Visible='<%# Eval("NeedQty") %>' /> <asp:TextBox ID="tbQty" runat="server" Width="30px" Visible='<%# Eval("NeedQty") %>' Text="0" Enabled="false" MaxLength="5" JQ="tbQty" /> <asp:Label ID="Label5" runat="server" Text=" )" Visible='<%# Eval("NeedQty") %>' /> </td> </tr> </ItemTemplate> </asp:ListView> </table>
下方為Jquery實作部分,將此段Script,置於Header中即可。
<% if (false) { %> <script src="../Script/jquery-1.4.1-vsdoc.js" type="text/javascript"></script> <% } %> <script type="text/javascript"> $(document).ready(function () { //CheckBox互動,以Table的ID=ItemTable,找這個Table裡的checkbox (input type=checkbox) $('#ItemsTable :checkbox').change(function () { //取得被點選CheckBox的ClientID. var ckid = $(this).attr('id'); //找到被點選的CheckBox後的第一個Type=text的ClientID. var tbid = $('#' + ckid + ' ~ :text').first().attr('id'); if ($('#' + tbid).length == 1) { //如果有正確取到TextBox(因這個TextBox為動態顯示) //取得是否被勾選 var cked = $(this).attr('checked'); if (cked) { $('#' + tbid).val('1'); //被勾選,將TextBox值改為,數量1 $('#' + tbid).attr('disabled', ''); //設定是否可更改 } else { $('#' + tbid).val('0'); //被取消勾選,將TextBox值改為,數量0 $('#' + tbid).attr('disabled', 'disabled'); //設定是否可更改 } } }); //TextBox檢核互動,以Table的ID=ItemTable,找這個Table裡的textbox (input type=textbox) $('#ItemsTable :text').keyup(function () { //檢查是否含非數字字元 if (isNaN($(this).val())) { alert('只可輸入數字字元!'); this.value = this.value.replace(/[\D]/g, ''); } //檢查是否只輸入0 if ($(this).val() == '0') { alert('至少要有數量1!'); this.value = '1'; } }).focusout(function () { //檢查是否未輸入數量 if ($(this).val() == '') { alert('至少要有數量1!'); this.value = '1'; } }); }); </script>
分享給大家。
沒有留言:
張貼留言