2013-05-05 4 views
1

Я использую плагин jquery select2 для наводящих полей формы. Я пытаюсь получить доступ к данным, хранящимся в атрибуте данных исходного скрытого ввода. Мне нужны данные из этих атрибутов, поэтому я могу отправить их в php-скрипт через Ajax. Есть ли у кого-нибудь какие-либо предложения о том, как это будет сделано? Я не могу найти ответ на Google или на официальном сайте.Select2 пользовательские атрибуты пользовательских данных

Благодаря

+0

Я немного запутался. Некоторые могли бы помочь ... – Kiruse

+0

? Извините, я не понимаю, что вы просите. –

ответ

0

Я в конечном итоге достичь этого путем

$(".suggestive-entry").click(function() { 
    var val = $(this).siblings('input:hidden').attr('data-field'); 
    alert(val); 
}); 

, как вы можете видеть, я использовал родные братья атрибут, чтобы получить скрытый вход ближе к ВЫБ.2 поле, сформировавшего событие щелчка.

+0

Мне показалось, что я решил это, но кажется, что события select2 никогда не позволят мне передать переменную функции ajax, потому что мое событие click срабатывает после. У кого-нибудь есть предложения? –

+0

Любое обновление об этом ??? – wilsonrufus

2

Вы также можете попробовать следующее. Предположим, что у вас есть выбор, вы можете добавить дополнительную информацию к параметрам, используя стандартный синтаксис атрибута данных из jQuery, см. jQuery data() API.

<select id="product"> 
     <option value="prod_x" data-additional-info="1234X">Product X</option> 
     <option value="prod_y" data-additional-info="1234Y">Product Y</option> 
</select> 

Теперь в вашем JavaScript вы можете получить доступ к самому опции элемента с помощью .select2 («данные»), в соответствии с API Docs - «Получает или задает выбор Аналогичен валь метод, но работает. объекты вместо ids ". Чтобы перейти к самому объекту опции, вам нужно пройти через элемент, массив всех выбранных параметров. В приведенном ниже примере выбор не является множественным значением, поэтому я всегда использую первый объект из массива, в дополнение к получению объекта я обертываю результат из «.element [0]» в $(), чтобы сделать его объектом jQuery ,

// Get the selected option using select2's api... 
var selectedOption = $($("#product").select2("data").element[0]); 

Теперь, когда у нас есть объект JQuery, мы можем использовать jQuery data() API следующим образом, чтобы получить произвольные данные, хранящиеся на элементе опции.

var additionalInfo = selectedOption.data("additional-info"); 

Дополнительная информация переменная теперь будет содержать либо «1234X» или «1234Y» в зависимости от того, который был выбран один.

Используя это, вы можете устранить скрытые входы, которые содержат дополнительные данные, и привязать их непосредственно к выбранной опции.

1

Мы можем получить данные атрибуты для выбранного варианта

var seledted = $("#selectId").select2().find(":selected"); 
var s = $(seledted).data("data-field"); 
1

Как и в документации:

// Шаблон:

<select> 
    <option value="0" data-foo="bar">option one</option> 
</select> 
//Initiate select2 
$("select").select2({ 
    formatResult: format, 
    formatSelection: format, 
    escapeMarkup: function(m) { return m; } 
}); 
//access custom data 
function format(state) { 
    var originalOption = state.element; 
    return $(originalOption).data('foo'); 
} 
+0

Это просто сработало для меня. Очень чистый подход. –