jquery动态加载对话框没有关闭

时间:2014-07-18 19:58:46

标签: jquery

我遇到过一个问题而且不确定它的来源。我有以下带有动态加载内容的对话框:

$(function(){   
    $('.dialog_link_check_interval').click(function(){          
        var link = this;

        var link_id = link.id.split('-');
        link_id = link_id[1];

        $('#dialog_check_interval').dialog({
            autoOpen: false,
            width: 650,
            modal: true,
            buttons: {
                'OK': function() {                      
                    var check_interval_new = $('#check_interval_new').val();

                    $.ajax({
                        url: 'file.php',
                        type: 'GET',
                        data: 'property_id=' + link_id + '&check_interval=' + check_interval_new,
                    });

                    $(this).dialog('close');
                }
            }
        });

        $('#dialog_check_interval').load('dialog_generator.php?link_id=' + link_id).dialog('open'); 
    });     
});

和HTML

<div id='dialog_check_interval' title='Check interval' style='display: none;'></div>    
<div id='check_interval-123' class='dialog_link_check_interval'>
   <a href='#' style='border:0'>dialog link</a>
</div>

在动态加载的dialog_generator.php中,有一个id = check_interval_new的文本输入。我发现如果从javascript中删除check_interval_new,则对话框将按预期关闭。但是,当有check_interval_new时,对话框没有关闭(但是正如我在alert函数中找到的那样,从dialog_generator.php中正确检索了值),点击&#34; OK&#34;按钮(但是按下ESC或点击右上角的X键关闭)。

请注意,我尝试了除$(this).dialog('close');之外的其他各种功能来关闭$('#dialog_check_interval').dialog('close');等对话框。

2 个答案:

答案 0 :(得分:0)

听起来像是缺少事件委托。由于您使用的是动态注入的对话框,因此应将事件绑定到插入元素时存在的父级。

Delegation in jQuery

答案 1 :(得分:0)

您对$ .ajax的调用未正确形成。应该是:

$.ajax({
    url: 'file.php',
    type: 'GET',
    data: {
      property_id: link_id,
      check_interval: check_interval_new,
    }
});

我发现至少有一个问题。

=====编辑=====

另外,请检查您在浏览器控制台中获得的内容。

=====编辑2 =====

只是为了充实我的一条评论:

var the_dialog = $('#dialog_check_interval');
the_dialog.dialog({
  autoOpen: false,
  width: 650,
  modal: true,
  buttons: {
    'OK': function() {                      
       var check_interval_new = $('#check_interval_new').val();

       $.ajax({
         url: 'file.php',
         type: 'GET',
         data: {
           property_id: link_id,
           check_interval: check_interval_new,
         } 
       }).success(function () {
         // consider adding a success function
       }).error(function () {
         // consider adding an error function
       });
       the_dialog.dialog('close');
    }
  }
});