【问题标题】:Fire onCheckChanged event of CheckBox from jQuery aspnet从 jQuery asp net 触发 CheckBox 的 onCheckedChanged 事件
【发布时间】:2016-09-12 19:45:22
【问题描述】:

我在 aspnet 网络表单的 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 事件

谁能帮忙?

【问题讨论】:

    标签: jquery checkbox oncheckedchanged


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

    【讨论】:

    • 我试过这个建议,但它仍然没有触发服务器端代码。
    • GridView在一个jQuery弹窗中加载,如编辑所示
    • 感谢 cmets
    【解决方案2】:

    感谢您的建议。在阅读了 loooot 之后,我得出的结论是我需要使用 .trigger('change'),而不是 ,trigger('OnCheckChanged')。如果我错了,请纠正我。

    另外,我必须在复选框字段中包含 AutoPostBack="true"。如果我不将此设置为“true”,则服务器端事件“OnCheckChanged”在渲染时不会附加复选框。

    现在的问题是,当我设置 AutoPostBack="true" 时,模式弹出窗口会消失,并且不会重新加载。

    有什么办法 (a) 将服务器端事件附加到控件而不设置 AutoPostBack ="true"?

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

    【讨论】:

      猜你喜欢
      • 2011-09-29
      • 2016-10-10
      • 2012-06-20
      • 2013-02-21
      • 1970-01-01
      • 2011-08-25
      • 1970-01-01
      • 1970-01-01
      • 2016-04-13
      相关资源
      最近更新 更多