【问题标题】:Trigger jQuery code on AutoPostBack = true?在 AutoPostBack = true 上触发 jQuery 代码?
【发布时间】:2014-03-19 15:39:27
【问题描述】:

我有一些 jQuery 代码将电话号码掩码应用于表单中的文本字段:

<script type="text/javascript" src="../../../js/jquery.maskedinput.min.js"></script>

<script type="text/javascript">
    $(document).ready(function () {
        $.mask.definitions['~'] = '[+-]';
        $('.phone').mask('(999) 999-9999');
    });
</script>

当用户第一次输入表单或用户刷新页面时,它工作得很好。但是,有一个 DropDownList 允许用户选择不同的送货地址。此 DropDownList 的 AutoPostBack 属性设置为“true”。

   <tr id="trAddressBook" runat="server">
        <th>Ship To:</th>
             <td>
                <asp:DropDownList ID="AddressBook" runat="server" Width="200px" DataTextField="Value" DataValueField="Key" AppendDataBoundItems="true" AutoPostBack="true">
                     <asp:ListItem Text="Billing Address" Value="0" />
                      <asp:ListItem Text="New Address" Value="-1" />
                 </asp:DropDownList>
              </td>
 </tr>

当用户从此 DropDownList 中选择一个选项时,电话掩码 jQuery 代码不再出现在电话号码文本框中。在 Google Chrome 中检查页面时,我没有看到任何错误。

无论用户是否使用DropDownList,是否有办法维护电话掩码代码?

下面是后面代码中的 Page_Load 函数:

    protected void Page_Load(object sender, EventArgs e)
    {
        // DETERMINE IF THE SHIPPING FORM MUST BE INITIALIZED
        bool initShipAddress;
        if (Page.IsPostBack)
        {
            // ON POSTBACK, WE ONLY INITIALIZE THE SHIPPING FORM IF THE ADDRESS SELECTION WAS CHANGED
            initShipAddress = (Request.Form["__EVENTTARGET"] == AddressBook.UniqueID);         
        }
        else
        {
            // ON FIRST VISIT, WE INITIALIZE SHIPPING FORM IF THE SHIPPING ADDRESS IS NOT THE BILLING
            initShipAddress = (GetShippingAddressId() != _User.PrimaryAddress.Id);
        }
        if (initShipAddress) InitializeShippingAddress();
    }

【问题讨论】:

  • 您是否将表单包装在更新面板中?

标签: c# jquery asp.net autopostback


【解决方案1】:

我可能错了,因为我已经很长时间没有使用 ASP.NET,但我相信你可以简单地将 $(document).ready(function () { ... }); 更改为 $(window).load(function() { ... });

$(window).load(function () {
    $.mask.definitions['~'] = '[+-]';
    $('.phone').mask('(999) 999-9999');
});

如果做不到这一点,ASP.NET 会在每次页面加载时执行一个名为 pageLoad 的函数:

function pageLoad() {
    $.mask.definitions['~'] = '[+-]';
    $('.phone').mask('(999) 999-9999');
};

【讨论】:

  • load 事件在 jQuery v1.8 中已弃用 api.jquery.com/load-event
  • 我都试过了 $(window).load(function(){});和功能 pageLoad() 但不幸的是,两者都没有解决问题。
  • 您的 JavaScript 是放在 HTML 末尾的 &lt;/body&gt; 结束标记之前,还是放在 &lt;head&gt; 中?
  • 在文档的中。
  • 实际上,pageLoad() 函数确实有效。我忘记了最后一个括号后的分号。谢谢! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多