c# - 如何使 JQuery 屏蔽输入插件在 asp.net Ajax 更新面板中的 AsyncPostback 之后工作?

标签 c# javascript jquery asp.net ajax

我有一个简单的 .aspx 页面和一个文本框,我想使用 jquery.maskedinput-1.3.js 屏蔽它,我的页面 .aspx 代码如下,问题是在第一页加载时,我的文本框被屏蔽了,但是在 asyncPostback 之后,屏蔽的输入插件不起作用!我怎样才能使屏蔽输入插件工作?提前致谢。

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script src="Scripts/jquery.js" type="text/javascript"></script>
    <script src="Scripts/jquery.maskedinput-1.3.js" type="text/javascript"></script>
    <script type='text/javascript'>
        jQuery(function ($) {
            $("#txtMembershipCode").mask("999-9999-999-9999");
        });

    </script>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager> 
    <div style="float: right" id="exDiv">
                <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                    <ContentTemplate>
                        <div style="float: right; width: 120px; font-family: Tahoma">
                            membership Code :</div>
                        <div style="float: left">
                            <asp:TextBox ID="txtMembershipCode" runat="server" CssClass="input" ClientIDMode="Static"
                                dir="ltr"></asp:TextBox>
                        </div>
                        <div style="font-family: Tahoma; float: left">
                            <asp:Button ID="btn" runat="server" Text="save" OnClick="btn_Click" CssClass="mybtn" /></div>
                        <div style="font-family: Tahoma; float: right">
                            <asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="UpdatePanel1">
                                <ProgressTemplate>
                                    <img src="Images/484.gif" />
                                </ProgressTemplate>
                            </asp:UpdateProgress>
                        </div>
                    </ContentTemplate>
                </asp:UpdatePanel>
    </div>
    </form>
</body>
</html>

我在网上尝试了很多不同的方法,但都没有用!

最佳答案

这是解决这个问题的一种方法-

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script src="Scripts/jquery.js" type="text/javascript"></script>
    <script src="Scripts/jquery.maskedinput-1.3.js" type="text/javascript"></script>
    <script type='text/javascript'>
        window.onload = function () {
            Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler);
        }

        function endRequestHandler(sender, args) {
            init();
        }

        function init() {
            $("#<%=txtMembershipCode.ClientID %>").mask("999-9999-999-9999");
        }

        $(function() { // DOM ready
            init();
        });
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager> 
    <div style="float: right" id="exDiv">
                <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                    <ContentTemplate>
                        <div style="float: right; width: 120px; font-family: Tahoma">
                            membership Code :</div>
                        <div style="float: left">
                            <asp:TextBox ID="txtMembershipCode" runat="server" CssClass="input" dir="ltr"></asp:TextBox>
                        </div>
                        <div style="font-family: Tahoma; float: left">
                            <asp:Button ID="btn" runat="server" Text="save" OnClick="btn_Click" CssClass="mybtn" /></div>
                        <div style="font-family: Tahoma; float: right">
                            <asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="UpdatePanel1">
                                <ProgressTemplate>
                                    <img src="Images/484.gif" />
                                </ProgressTemplate>
                            </asp:UpdateProgress>
                        </div>
                    </ContentTemplate>
                </asp:UpdatePanel>
    </div>
    </form>
</body>
</html>

此方法使用 Sys.WebForms.PageRequestManager JavaScript class并且是可能的,因为你有一个 Script Manager在您的 .aspx 页面上。基本上在每次异步回发之后,都会调用 init() 函数。

注意 init() 函数也在 DOM 准备就绪时被调用。这允许您在异步回发期间内容更改后再次对 DOM 执行所有操作。在使用包括这个在内的各种 jQuery 插件之前,我已经使用过这种技术。

关于c# - 如何使 JQuery 屏蔽输入插件在 asp.net Ajax 更新面板中的 AsyncPostback 之后工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18915853/

相关文章:

javascript - 避免重复调用一个函数,除非它的工作完成

IE 中的 jQuery 鼠标闪烁

c# - 有没有尝试 Convert.ToInt32 ...避免异常

c# - 迁移期间未找到 Entity Framework 外键

javascript - typescript : Is there a way to get all the keys in a Javascript object with nested properties?

javascript - 是否可以仅使用 JavaScript 客户端脚本从 Twitter 和 Facebook 聚合用户状态?

javascript - Bootstrap如何实现左右缩进的定顶菜单?

jquery - jQuery 库如何使用 $ 代替 "JQuery"来引用对象?

java - 网络/代理身份验证(WebClient.UseDefaultCredentials 替代方案)

c# - 使用 C# 在 Unix 机器上调用 perl 脚本