2010-04-06 20 views
11

Teniendo problemas al hacer referencia a $ (esto) desde dentro de la función de éxito anidada de ajax ... Sé que esto es un problema de alcance, pero parece que no puede encontrar una forma limpia de cerrar el diálogo en una actualización exitosa. Gracias por cualquier ayuda.

$("#dialog_support_option_form").dialog({ 
     width: 400, 
     height: 180, 
     bgiframe: true, 
     autoOpen: false, 
     modal: true, 
     buttons: { 
      'Save Support Option': function(){ 
       $.ajax({ 
        type: 'POST', 
        url: "support_options/create_support_option.php", 
        data: $(this).find('form').serialize(), 
        success: function(data){ 
         $("#list_support_options").html(data); 
         $(this).dialog('close'); 
        } 
       }); 
      }, 
      'Cancel': function(){ 
       $(this).dialog('close'); 
      } 
     }, 
     close: function(){ 
      $(this).find('input').val(''); 
     } 
    }); 

Respuesta

21

Debe usar la opción ajax context: $(this), para establecer el alcance de las devoluciones de llamada para el elemento seleccionado.

+0

boom, bang, zing. Exactamente lo que estaba buscando. Escuché un rumor sobre esta opción pero no pude encontrarla. Gracias. – uberdanzik

+0

Magnífico, me ayudaste también – Binaryrespawn

4

Usted necesita tener una copia de esa variable, así:

var dlg = $(this); 
$.ajax({ 
    type: 'POST', 
    url: "support_options/create_support_option.php", 
    data: $(this).find('form').serialize(), 
    success: function(data){ 
    $("#list_support_options").html(data); 
    dlg.dialog('close'); 
    } 
}); 

Desde this es en un contexto diferente en el retorno, que necesita para capturar y pasarlo en el cierre :)

+0

eh. mo 'vars, mo' problemas. –

+1

@Jonathan Julian - Todas estas son variables dentro de un cierre, ¿crees que 'context:' no establece algunas? :) –

+0

sí, esto funciona, pero esperaba no utilizar una variable adicional – uberdanzik

2

intentarlo con $.proxy()

success: $.proxy(function(data){ 
    $(this).dialog('close'); 
}, this); 

Usted 'pase' puede el alcance de 'arriba' a una función con él

Cuestiones relacionadas