2011-11-23 4 views
4

나는 먼저 var로 설정하지 않고 즉시 대화 상자를 호출합니다 (클릭 할 때). 그래서 같이 :아약스 성공 내에서 대화 상자를 닫을 수 없습니다.

$(".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");를 호출 할 때 : 잘 작동 $(this).dialog("close");은 "cancel"버튼을 내

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

.

ajax 성공 호출 내에서 close 함수를 사용하려면 어떻게해야합니까?

답변

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

안녕하세요 Mario - 나도 마찬가지입니다. 해결책? – 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

귀하의 $ (이) 아래에 성공 함수 내 다른 의미를가집니다 표시와 같은 다른 변수에 대화 상자 객체를 저장 할 수 있습니다. 변수에 할당하고 아약스 성공 함수 내에서 사용 해보십시오.

관련 문제