UpdatePanel异步回发后的Javascript事件订阅

Mik*_*kka 4 javascript asp.net jquery asynchronous maskedtextbox

我在asp.net页面上的异步回发后遇到了jquery事件处理程序的问题.我读了这个主题 - 这是一个很好的解决方案,但我需要一个单独的功能.所以我正在使用jquery蒙面插件.

我的js代码现在是:

<script type="text/javascript">

jQuery(document).ready(function () {
  var control = $("#txtCustomerPhone");

  InitPhonePattern(this, control);

  var prm = Sys.WebForms.PageRequestManager.getInstance();
  prm.add_endRequest(InitPhonePattern(this, control));
 });

 function InitPhonePattern(sender, args) {
  $(args[0]).mask("+7 (999) 999-99-99", { completed: 
    function () {
    $('#btnCheckCustomerPhone').click();} 
  });

}
</script>
Run Code Online (Sandbox Code Playgroud)

如您所见,掩码初始化了2次:在文档Ready()和异步回发之后(在endRequest()上).但是在异步回发后没有映射掩码插件.

有人明白问题吗?我很感激你的帮助!

Ari*_*tos 5

你的代码中的问题是jQuery(document).ready不会在更新面板之后运行,所以你需要从jQuery中生成endRequest.

试试这种方式:

<script type="text/javascript">
        var prm = Sys.WebForms.PageRequestManager.getInstance();    
        prm.add_initializeRequest(InitializeRequest);
        prm.add_endRequest(EndRequest);

        function InitializeRequest(sender, args) {      
        }

        function EndRequest(sender, args) {
             Init();
        }

        jQuery(document).ready(function(){Init();});

        function Init()
        {
          var control = $("#txtCustomerPhone");
          InitPhonePattern(control);        
        }

        function InitPhonePattern(args) {
            $(args[0]).mask("+7 (999) 999-99-99", { completed: 
            function () {
               $('#btnCheckCustomerPhone').click();} 
            });
        }
</script>
Run Code Online (Sandbox Code Playgroud)


Mik*_*kka -1

我想对Aristos的帮助和正确的方向表示感谢!在你的代码中我只修复了这个字符串:

jQuery(document).ready(Init);//direct transfer function not work;
Run Code Online (Sandbox Code Playgroud)

所以最终代码如下所示:

<script type="text/javascript">
     var prm = Sys.WebForms.PageRequestManager.getInstance();
     prm.add_endRequest(EndRequest);

     function EndRequest(sender, args) {
         Init();
     }

     $(document).ready(function () {
         Init();
     });

     function Init() {
         var control = $('#txtCustomerPhone');
         InitPhonePattern(control);
     }

     function InitPhonePattern(args) {
         $(args).mask("+7 (999) 999-99-99", { completed:
            function () {
                $('#btnCheckCustomerPhone').click();
            }
         });
    }

</script>
Run Code Online (Sandbox Code Playgroud)