2010-04-06 13 views
11

Yuvalanmış bir ajax 'başarı' işlevinden $ (this) 'a başvurmakla ilgili sorunlar yaşıyorum ... Bunun bir kapsam sorunu olduğunu biliyorum, ancak iletişimin başarılı bir güncelleştirmede kapatılması için temiz bir yol bulamıyor gibi görünüyor. Herhangi bir yardım için teşekkürler.

$("#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(''); 
     } 
    }); 

cevap

21

Ajax seçeneği context: $(this), seçeneğini kullanarak geri çağrılanların kapsamını seçilen öğeye göre ayarlamanız gerekir.

+0

bom, patlama, zing kullanma umuyordum. Tam olarak aradığım şey. Bu seçenek hakkında bir söylenti duydum ama bulamadı. Teşekkürler. – uberdanzik

+0

Superb, sen de bana yardım ettin – Binaryrespawn

4

Böyle, bu değişkenin bir kopyası olması gerekir: this dönüş farklı bir bağlamda olduğundan

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'); 
    } 
}); 

, bunu yakalamak ve kapatılması içine geçmesi gerekiyor :)

+0

eh. mo 'vars, mo' problemleri. –

+1

@Jonathan Julian - Bütün bunlar bir kapağın içinde değişkenler, sizce bağlam: 'bir kaçını ayarlamıyor musunuz? :) –

+0

evet, bu işe yarıyor ama ekstra değişken – uberdanzik

2

$.proxy()

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

ile deneyin yapabilirsiniz 'pass' 'Yukarıdaki' kapsamındaki bir işleve kapsam

İlgili konular