2013-02-27 13 views
7

ajax ile Select2 kullanıyorum. Her şey iyi çalışıyor, kullanıcı istediği öğeye tıkladığında, bazı şeyler yapmak için belgelerin belirttiği on (change) işlevini kullanıyorum.Jquery Select2, ajax verisi açık (değiştir) fonksiyonuna nasıl erişilir?

$("#e6").on("change", function(e) {   
     $('input#Destination').val(e.val); 
      }); 

}); 

dönüş değeri (e.val) ajax çağrısından data.id değerdir, ancak benim veri nesnesi, "id" ve "tip" "adı" vardır .

dataFormatSelection() öğesine kod ekleyebilirim ancak bu mantıksız ve kafa karıştırıcı değil. Ben ("değişim" de bütün VERİ nesne (yerine sadece data.id) erişebilir nasıl

 function dataFormatSelection(data) { 
    console.log(data.name + "|" data.id + "|" + data.type); 
    return data.name; 
} 

.. olay?

cevap

18
$("#e6").on('change', function(e) { 
    // Access to full data 
    console.log($(this).select2('data')); 
}); 
+3

Bunun neden çalıştığını açıklayabilir misiniz? – ford

+0

Vay, bu çalışıyor ... teşekkürler! –

2

Select2 docs değiştirme olayı göre 3 olmalıdır özellikleri:

  • val: (dikkate değişim sonucu dikkate alınarak) mevcut seçimi - kimliği veya kimlikleri
  • 0 dizi olay nesnesi aşağıdaki özel özellikleri içerir
  • ekledi: eklenen eleman varsa -
  • kaldırıldı tam eleman nesne, sadece id: kaldırılan eleman varsa - tam element obje değil, sadece kimliği

bile var örnek:

$("#e11").select2({ 
    placeholder: "Select value ...", 
    allowClear: true, 
    data: [{id: 0, text: 'story'},{id: 1, text: 'bug'},{id: 2, text: 'task'}] 
}); 

$("#e11_2").select2({ 
    placeholder: "Select value ...", 
    multiple: true, 
    data: [{id: 0, text: 'story'},{id: 1, text: 'bug'},{id: 2, text: 'task'}] 
}); 

$("#e11").on("change", function(e) { 
    console.log(JSON.stringify({val:e.val, added:e.added, removed:e.removed})); 
}).on("open", function() { 
    console.log("open"); 
}); 

$("#e11_2").on("change", function(e) { 
    console.log(JSON.stringify({val:e.val, added:e.added, removed:e.removed})); 
}).on("open", function() { 
    console.log("open"); 
}); 

Ama multiple: true açıkken added ve removed özellikleri yalnızca mevcut olduğunu fark ettim. Bunun tasarımla mı, yoksa hata mı olduğunu bilmiyorum. Her halükarda rapor vereceğim, çünkü seçilen elemanın değişime açık olması kesinlikle gerekli bir şey.

0

ben şüphe var ... ben konsol günlüğüne gösteren değerleri alır ve bunu nasıl kullanabilirim?

Bu değerleri alıp her birini bir varlığa yerleştirirsem doğru mu? Herhangi bir varyant için console.log (var) kullanırsam, değer görüntülenir, ancak bir uyarı (var) çıkarsa uyarı gösterilmez.

AJAX ile bir PHP işlevi çağırmak için seçilen seçeneğin değerini almam gerekir.

$("#e11").on('change', function(e) { 
    //I create a var data and works it like an Array 
    var data = $(this).select2('data'); 
    //Then I take the values like if I work with an array 
    var value = data.id; 
    var text = data.text; 
    //If I use console.log(var) the values are displayed but not with an alert 
} 

Teşekkürler !!!

+0

Yeni bir soru oluşturmanız gerektiğini düşünüyorum, farklı bir sorun var –

+0

Evet, üzgünüm, sebebiniz var ... Bu kod çalışıyor! – PX10

+0

'$ (this) .select2 ('data')' bir dizi döndürecek, bu yüzden 'data [Index] .id' ile erişmelisiniz – Dementic