2013-02-27 31 views
7

Tôi đang sử dụng Select2 với ajax. Mọi thứ hoạt động tốt, khi người dùng nhấp vào mục họ muốn, tôi sử dụng chức năng bật (thay đổi) theo quy định của tài liệu để thực hiện một số nội dung.Jquery Select2, cách truy cập dữ liệu ajax ở trên (thay đổi) chức năng?

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

}); 

Giá trị trả về (e.val) là data.id giá trị từ cuộc gọi ajax, nhưng đối tượng dữ liệu của tôi có "tên", "id" và "loại" .

Tôi có thể thêm mã vào dataFormatSelection() nhưng điều này không có vẻ logic và gây nhầm lẫn.

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

Làm thế nào tôi có thể truy cập toàn bộ dữ liệu đối tượng (thay vì chỉ data.id) tại trên ("thay đổi" .. sự kiện?

Trả lời

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

Bạn có thể giải thích lý do tại sao tính năng này hoạt động không? – ford

+0

wow, công trình này ... cảm ơn! –

2

Theo Select2 docs kiện thay đổi nên có 3 thuộc tính: Đối tượng sự kiện chứa các thuộc tính tùy chỉnh sau:

  • val: lựa chọn hiện tại (có tính đến kết quả của thay đổi) - id hoặc mảng ids
  • thêm: các yếu tố bổ sung, nếu có - những đối tượng yếu tố đầy đủ, không chỉ là id
  • loại bỏ: các yếu tố loại bỏ, nếu có - những đối tượng yếu tố đầy đủ, không chỉ là id

Có thậm chí là Ví dụ:

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

Nhưng tôi nhận thấy rằng addedremoved tài sản này chỉ xuất hiện khi multiple: true là trên. Tôi không biết nếu điều này là do thiết kế hoặc là nó lỗi. Tôi sẽ báo cáo nó anyway, bởi vì có yếu tố được lựa chọn có sẵn trên thay đổi chắc chắn là một cái gì đó cần thiết.

0

Tôi có nghi ngờ ... Làm cách nào để lấy giá trị hiển thị trong nhật ký bảng điều khiển và sử dụng?

đúng nếu tôi lấy các giá trị này và đặt từng giá trị vào một var? Bởi vì nếu tôi sử dụng console.log (var) cho bất kỳ var nào được tạo, giá trị được hiển thị nhưng nếu một cảnh báo (var) cảnh báo sẽ không bao giờ được hiển thị.

Tôi cần lấy giá trị của tùy chọn được chọn để gọi bằng AJAX một hàm PHP.

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

Cảm ơn !!!

+0

Tôi nghĩ bạn nên tạo một câu hỏi mới, đó là một vấn đề khác nhau –

+0

Có, tôi xin lỗi, bạn có lý do ... Mã đó hoạt động tốt! – PX10

+0

'$ (this) .select2 ('data')' sẽ trả về một mảng, vì vậy bạn nên truy cập nó bằng 'data [Index] .id' – Dementic

Các vấn đề liên quan