2011-11-23 47 views
4

我正在调用一个对话框(点击),而不是首先将其设置为var。像这样:无法在ajax成功关闭对话框

$(".deleteSaved").click(function() { 
     save_id = $(this).attr('id'); 


    div="<div>Are you sure you want to delete this?</div>"; 
    $(div).dialog({ 
     buttons: { 
      "Delete": function() { 
       $.ajax ({ 
        url:"util.php", 
        data:"q=0&f=delete&save_id="+save_id, 
        success: function(result){ 
         $(this).dialog("close"); //this line is not working 
         $("#toprow"+save_id).fadeOut(); 
         $("#botrow"+save_id).fadeOut(); 
        } 
       }) 
      }, 
      "Cancel": function() { 

       $(this).dialog("close"); 
      } 
     }, 
     modal: true, 
     title: 'Delete Saved Signal', 
     resizable: false 
    }); 
}); 

但是当我打电话$(this).dialog("close");阿贾克斯成功函数我碰到下面的错误中:

Uncaught cannot call methods on dialog prior to initialization; attempted to call method 'close' 

内“cancel”按钮$(this).dialog("close");工作得很好。

如何获取关闭函数在ajax成功调用中工作?

回答

11

在成功函数里,'this'没有指向对话框对象。您可能需要在对话框对象存储在另一个变量,如下面所示

"Delete": function() { 
       var that = this; 
        $.ajax ({ 
         url:"util.php", 
         data:"q=0&f=delete&save_id="+save_id, 
         success: function(result){ 
          $(that).dialog("close"); //this line will work 
          $("#toprow"+save_id).fadeOut(); 
          $("#botrow"+save_id).fadeOut(); 
         } 
        }) 
       }, 
+0

这是一个很好的解决方案@robert,我一直在努力工作数小时这个。非常感谢! :) – Anurag

0

对“成功”的功能范围是不一样的范围为“删除”或“取消”功能...

尝试使用类似var myDiv = $(div);,然后你可以调用它,无论你想。尽量减少$(this)的使用以避免这种情况。

而且,只是一个快速提示,而不是$(this).attr('id')使用this.id;)

+0

嗨马里奥 - 我想了很多。解? – themerlinproject

+0

解决?在$(div).dialog之前...执行var myDiv = $(div)然后,可以调用myDiv.dialog('close') –

2

使用$您不能引用它(这),因为你是在另一个函数,你可以这样做,

div="<div id='yourDialog'>Are you sure you want to delete this?</div>"; 
//...........  

    $("#yourDialog").dialog("close"); 
0

你$(本)具有成功的功能中有不同的含义。尝试将它分配给一个变量,并使用你的ajax成功函数