从jQuery aspnet触发CheckBox的onCheckChanged事件

时间:2016-09-12 19:45:22

标签: jquery checkbox oncheckedchanged

我在aspnet webform中的GridView中有一个CheckBox字段。在用户选中/取消选中每个复选框后,我想使用jQuery为该复选框运行OnCheckedChanged事件的服务器端代码。

GridView在jQuery弹出窗口中加载,如此

<div id="dialog" style="display: none">
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" OnPageIndexChanging="OnPageIndexChanging" DataKeyNames="ID"
        PageSize="10" AllowPaging="true">
        <Columns>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:checkbox id="chk" runat="server" Text="Select" OnCheckedChanged="OnCheckChanged" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:BoundField DataField="ID" HeaderText="ID" ItemStyle-Width="100" />
            <asp:BoundField DataField="Name" HeaderText="Name" ItemStyle-Width="300" />
            <asp:BoundField DataField="Description" HeaderText="Description" ItemStyle-Width="400" />
        </Columns>
    </asp:GridView>
</div>

jQuery就像这样

$(document).ready(function () {
    $("input:checkbox").click(function () {
        if ($(this).is(":checked")) {
            $(this).trigger('OnCheckChanged',true);            
        } else {
            alert("false");
        }
    });
});

我的“CheckChanged”事件就像这样

Sub OnCheckChanged(sender As Object, e As EventArgs)
Dim chk As CheckBox = TryCast(sender, CheckBox)
Dim row As GridViewRow = TryCast(chk.NamingContainer, GridViewRow)
Dim pk As String = GridView1.DataKeys(row.RowIndex).Values(0).ToString
If chk.Checked = True Then
      'Do something  
Else
      'Do something 
End If

End Sub

取消选中CheckBox时,jQuery函数可以正常工作。但它不会触发服务器端OnCheckChanged事件

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

$(document).ready(function () {
   $("input[type=checkbox]" ).click(function () {
       if ($(this).is("input:checked")) {
           $(this).trigger('OnCheckChanged',true);            
       } else {
           alert("false");
       }
    });
});

答案 1 :(得分:0)

感谢您的建议。在读完一个loooot之后,我得出的结论是我需要使用.trigger(&#39;更改&#39;),而不是触发(&#39; OnCheckChanged&#39;)。如果我错了,请纠正我。

另外,我必须包含AutoPostBack =&#34; true&#34;对于复选框字段。如果我没有将此设置为&#34; true&#34;,则服务器端事件&#34; OnCheckChanged&#34;在渲染时没有附加复选框。

现在问题是,当我设置AutoPostBack =&#34; true&#34;时,模态弹出窗口消失,并且不重新加载。

有没有办法 (a)将服务器端事件附加到控件而不设置AutoPostBack =&#34; true&#34;?

(b)或者,我可以在回发后重新加载模态弹出窗口,复选框的状态与用户选择的状态相同吗?