2013-10-28 122 views
0

我用這個代碼能夠檢查gridview行選擇哪個工作的複選框。但是,除非單擊實際複選框,否則後面的代碼不會運行。有任何想法嗎?複選框OnCheckedChanged沒有觸發時,通過JQuery檢查複選框

ASPX代碼:

<asp:GridView runat="server" ID="gvReconciledGroups" AutoGenerateColumns="false" EmptyDataText="No Reconciled Items to Batch" DataKeyNames="GroupID"> 
    <Columns> 
     <asp:TemplateField> 
      <ItemTemplate> 
       <asp:CheckBox runat="server" ID="cbFinalise" AutoPostBack="true" OnCheckedChanged="cbFinalise_OnCheckedChanged" ClientIDMode="Static" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:BoundField HeaderText="GroupID" HeaderStyle-HorizontalAlign="Left" ItemStyle-HorizontalAlign="Left" DataField="GroupID" /> 
     <asp:BoundField HeaderText="Date" HeaderStyle-HorizontalAlign="Left" ItemStyle-HorizontalAlign="Left" DataField="Date" DataFormatString="{0:dd/MM/yyyy}" ItemStyle-Width="100px" /> 
     <asp:BoundField HeaderText="Cashier" HeaderStyle-HorizontalAlign="Left" ItemStyle-HorizontalAlign="Left" DataField="Cashier" ItemStyle-Width="100px" /> 

腳本:

<script type="text/javascript"> 
    $(function() { 
     $('tr.gridview_row,tr.gridview_alternatingRow').click(function() { 
      var checked = $(this).find('input[id*=cbFinalise]').prop('checked'); 
      $(this).find('input[id*=cbFinalise]').prop('checked', !checked); 
     }); 
    }); 
</script> 

代碼背後:

public void cbFinalise_OnCheckedChanged(Object sender, EventArgs e) 
{ 
    //Calculations 
} 

回答

1

jQuery是完全客戶端。 OnCheckedChanged只會在發生回發後由於單擊無線電input而在服務器端觸發。試試這個:

$('tr.gridview_row,tr.gridview_alternatingRow').click(function() { 
    $(this).find('input[id*=cbFinalise]').click(); // this should force a postback 
}); 

注意,手動更改控制的checked屬性是多餘的,因爲你無論如何都會被刷新頁面和控件的狀態將被ASP.Net被設置爲它重新呈現頁面。

1

我建議你以觸發複選框,點擊以迫使回傳:

<script type="text/javascript"> 
    $(function() { 
     $('tr.gridview_row,tr.gridview_alternatingRow').click(function() { 
      $(this).find('input[id*=cbFinalise]').trigger('click'); 
     }); 
    }); 
</script>