2013-02-27 85 views
7

我正在使用Select2和ajax。 一切工作正常,當用戶點擊他們想要的項目時,我使用文檔中指定的on(change)函數來做一些事情。jquery select2,如何在on(change)函數中訪問ajax數據?

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

}); 

的返回值(e.val)是從Ajax調用的data.id價值,但我的數據對象具有 「」, 「ID」 和 「」 。

我可以將代碼添加到dataFormatSelection(),但這聽起來不合邏輯並且令人困惑。

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

我怎樣才能在上( 「變」 訪問整個數據對象(而不是僅僅data.id)..事件?

回答

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

你能解釋它爲什麼可行嗎? – ford 2013-04-14 07:55:58

+0

哇,這個作品...謝謝! – 2013-04-16 22:31:40

2

根據Select2 docs更改事件應該有3個屬性:事件對象包含以下自定義屬性:

  • val:當前選擇(考慮到更改的結果) - id或ID數組
  • 補充道:添加的元素,如果有的話 - 完整的元素對象,而不僅僅是ID
  • 刪除:刪除的元素,如果有的話 - 完整的元素對象,而不僅僅是ID

甚至有例如:

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

但是我注意到addedremoved屬性僅存在時multiple: true上。我不知道這是設計還是錯誤。無論如何,我會報告它,因爲選擇的元素可用於更改是絕對需要的。

0

我懷疑... 我怎麼可以在控制檯日誌顯示的值,並使用它?

這是正確的,如果我把這些值,並把每個變成一個var? 因爲如果我使用console.log(var)創建的任何變量值都會顯示,但如果執行警報(var),警報永遠不會顯示。

我需要將所選選項的值用AJAX調用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 
} 

謝謝!!!

+0

我認爲你應該創建一個新的問題,這是一個不同的問題 – 2014-02-27 17:20:17

+0

是的,我很抱歉,你有理由...該代碼工作正常! – PX10 2014-02-28 03:09:00

+0

'$(this).select2('data')'將返回一個數組,所以您應該通過'data [Index] .id'來訪問它 – Dementic 2016-02-06 11:38:40