jquery对话框自定义关闭按钮仅适用于第一次加载,而不是第二次加载为什么?

时间:2013-11-14 07:59:22

标签: jquery

  1. 在我的MVC 3应用程序中,我有一个链接按钮,点击此按钮,在jquery对话框中加载部分视图。
  2. 查看

       <a class="dialogLink" href="/Home/OpenDialog">OPen Dialog</a>
    

    部分视图

    <div id="dlgReport"><input type="button" id="closeDialog" value="Close"/></div>
    

    控制器

    public ActionResult OpenDialog(ViewModel model){
     //setting value
    return PartialView(model);}
    

    Jquery代码

    $(function () {
      $.ajaxSetup({ cache: false, async: false });
      $('.dialogLink').live('click', function () {
         var dialogId = 'uniqueName-' + Math.floor(Math.random() * 1000)
         var dialogDiv = "<div id='" + dialogId + "'></div>";
         var data = $('form').serialize();
         $.post(this.href, data)
         .success(function (result) {
            $(dialogDiv).html(result).dialog({
            autoOpen: true,modal: true,title: 'Test',
            open: function () {
              $('#closeDialog').bind('click', function (e) {
              //debugger;
              $(".ui-dialog-content").dialog().dialog("close");
         });}});})
         return false;});});
    
    1. 一切正常,当我点击链接按钮(打开对话框)时,一个帖子请求将转到控制器,填充数据并将数据传递给局部视图和部分视图加载自定义“关闭对话框”按钮。 / p>

    2. 首次单击“关闭对话框”按钮,关闭对话框,但是当我再次加载对话框时,“关闭对话框”将无效。

    3. 我用调试器检查,第二次,

      ('#closeDialog')。bind('click',function(e){

      没有打电话,不知道这里有什么不对。请指教!谢谢!

    4. 注意 - 如果我使用代码“ $(this).dialog('close'); ”而不是“ $(”。ui-dialog-content“)。对话框()。dialog(“关闭”); “,然后我点击”关闭对话框“按钮从第一次开始收到未知错误。

2 个答案:

答案 0 :(得分:0)

您可能无法多次绑定该事件。 尝试

 $(function () {
            $.ajaxSetup({ cache: false, async: false });
            $('.dialogLink').live('click', function () {
                var dialogId = 'uniqueName-' + Math.floor(Math.random() * 1000)
                var dialogDiv = "<div id='" + dialogId + "'></div>";
                var data = $('form').serialize();
                $.post(this.href, data)
                .success(function (result) {
                    $(dialogDiv).html(result).dialog({
                        autoOpen: true, modal: true, title: 'Test',
                        open: function () {
                            $('#closeDialog').unbind('click', fnBindClick);
                            $('#closeDialog').bind('click',fnBindClick);
                        }
                    });
                })

                function fnBindClick(e) {
                    //debugger;
                    $(".ui-dialog-content").dialog().dialog("close");
                } 
                return false;
            });
        });

答案 1 :(得分:0)

最后,我从其他堆栈溢出线程得到答案,我们需要清空并删除对话框,

$(function () {
 $.ajaxSetup({ cache: false, async: false });
 $('.dialogLink').live('click', function () {
 var dialogId = 'uniqueName-' + Math.floor(Math.random() * 1000)
 var dialogDiv = "<div id='" + dialogId + "'></div>";
 var data = $('form').serialize();
 $.post(this.href, data)
 .success(function (result) {
    $(dialogDiv).html(result).dialog({
    autoOpen: true,modal: true,title: 'Test',
    open: function () {
      $('#closeDialog').bind('click', function (e) {
      //debugger;
      $(".ui-dialog-content").dialog().dialog("close");
      $(this).empty();
      $(this).remove();
 });}});})
 return false;});});