将更改侦听器附加到循环中的jquery选择的选择,而不是工作

时间:2015-08-04 12:16:15

标签: javascript jquery jquery-chosen

我正在尝试在循环中初始化多个选择的选择:

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>

问题是,最后&#39;更改&#39;事件处理程序将附加到所有选择元素。例如,从&#34; key1&#34;中选择一个项目。打印null,因为.chosen().val()从&#34; key2&#34;获取值。有什么建议吗?

实际上我想将每个选定的选定值存储到不同的字段中,例如,存储到此对象中:

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

1 个答案:

答案 0 :(得分:2)

您不需要循环来执行此操作。您可以通过用逗号分隔id选择器来检索这两个元素。然后,在change处理程序中,您可以使用this关键字引用引发事件的元素。试试这个:

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

Example fiddle