2015-08-04 1 views
1

Я пытаюсь инициализировать множественным выбрали выбрать в цикле:Прикрепление изменения слушателя в Jquery подобранный выбирает в цикле, не работает

var arr = ["#key1", "#key2"]; 

for (var p in arr) { 
    $(arr[p]).chosen().change(function() { 
     console.log($(arr[p]).chosen().val()); 
    }); 
} 

где элементы:

<div> 
    <select multiple="" id="key1"> 
     <option value="A1">A1</option> 
     <option value="B1">B1</option> 
    </select> 
</div> 
<div> 
    <select multiple="" id="key2"> 
     <option value="A2">A2</option> 
     <option value="B2">B2</option> 
    </select> 
</div> 

проблема в том, что последний обработчик события «change» привязан ко всем элементам выбора. Например, выбор элемента из «key1» печатает null, так как .chosen().val() получает значения из «key2». Какие-либо предложения?

На самом деле я хотел, чтобы сохранить выбранные значения каждого выбран в различные области, например, в этом объекте:

var selected_values = { 
    selected_keys1 : {}, 
    selected_keys2 : {} 
} 
+0

привязок в петле влияет только на последний, так что это решение либо закрытие использование ее решить или просто сделать селектор, который должен быть разделены запятой основе. – Jai

+0

@ Джей, я понял это сейчас. –

ответ

2

Вам не нужен цикл, чтобы сделать это. Вы можете извлечь оба элемента, разделив селектор id запятой. В обработчике change вы можете ссылаться на элемент, который поднял событие, используя ключевое слово this. Попробуйте это:

$("#key1, #key2").chosen().change(function() { 
    console.log($(this).val()); 
}); 

Example fiddle

+0

Спасибо за быстрый ответ. Вы можете увидеть редактирование в вопросе. Как сохранить выбранные значения с помощью поиска по запятой, как вы предложили в своем ответе? –

+0

Вы можете сделать что-то вроде этого: http://jsfiddle.net/L2h89tqe/1/ –

 Смежные вопросы

  • Нет связанных вопросов^_^