【问题标题】:How to trigger Asp:HiddenField OnValueChanged event using JQuery?如何使用 JQuery 触发 Asp:HiddenField OnValueChanged 事件?
【发布时间】:2011-11-30 14:20:49
【问题描述】:

我有这个asp:hiddenField 控件:

<asp:HiddenField ID="AuxHiddenField" runat="server"/>

我想使用 Jquery 触发其(服务器端)值更改事件:

Protected Sub AuxHiddenField_Changed(ByVal sender As Object, ByVal e As System.EventArgs) Handles AuxHiddenField.ValueChanged
    'some logic here      
End Sub

我试过了:

$('#AuxHiddenField').val("Mohaha!!");   

Jquery 找不到元素并且没有任何反应。 我该如何解决?

【问题讨论】:

    标签: javascript jquery asp.net vb.net


    【解决方案1】:

    ASP.net 使用一种算法来生成ClientID。默认情况下,它基于命名容器的控件被包含在相继中。

    生成的 HTML 中的 ID 很可能不是 AuxHiddenField,而是类似于 ctl00_AuxHiddenField

    要么设置ClientIDMode

    <asp:HiddenField ID="AuxHiddenField" runat="server" ClientIDMode="Static" />
    

    或者在 jquery 中,使用attirute selectors:

    $('input[id$=AuxHiddenField]')  // id ends with AuxHiddenField
    

    我个人不喜欢 &lt;%= Field.ClientID %&gt; 这样做的方式,因为如果您的 javascript 在单独的文件中,它不会被 asp.net 处理。

    进一步阅读:


    使用 javascript 以编程方式更改值不会触发 change 事件,您必须手动触发它:

    $('input[id$=AuxHiddenField]').val("any val").change(); // or .trigger('change');
    

    在行动here


    关于 ValueChanged 事件

    不幸的是,HiddenField 没有AutoPostBack 属性(毕竟是有道理的)。
    我认为您必须在更改值后以编程方式触发回发。
    如果您使用 ajax,请使用 __doPostBack(),否则,请提交您的表单 document.forms[0].submit()

    另一种解决方案是将 HiddenField 替换为不可见的 TextBox:

    <asp:TextBox runat="server" ID="mytextbox" Value="" Style="display:none;" AutoPostBack="true" OnTextChanged="mytextbox_TextChanged"></asp:TextBox>
    

    以编程方式更改值将在服务器端引发事件。
    请注意,对于隐藏文本框,您不应使用Visible="false,因为它不会在最终的 html 中呈现,请使用 Style="display:none;" 属性 (css)。

    【讨论】:

    • 感谢 Didier G。但是您显示的更改事件是客户端输入更改事件。我需要服务器端 HiddenField OnValueChanged 事件。如何在服务器端触发 OnValueChanged 事件?
    • 嗯,不要回忆这个“OnValueChanged”要求。无论如何,HiddenField 没有AutoPostBack(有道理)。您可能必须自己使用__doPostBack() 触发回发。例如,您还可以使用 display:none 更改 TextField 的 HiddenField。
    • +1 因为如果你的 javascript 在一个单独的文件中,它不会被 asp.net 处理。
    【解决方案2】:

    要找到一个值:

    $('#<%= AuxHiddenField.ClientID %>').val("Mohaha!!");
    

    但是,使用 JavaScript 设置值永远不会触发更改事件,而且我认为隐藏不支持它....

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-24
      • 2013-06-16
      相关资源
      最近更新 更多