javascript - 将更改监听器附加到循环中的 jquery-chosen 选择,不起作用

标签 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>

问题是,last 'change' 事件处理程序正在附加到所有选择元素。例如,从“key1”中选择一个项目会打印出 null,因为 .chosen().val() 正在从“key2”获取值。有什么建议吗?

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

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

最佳答案

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

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

Example fiddle

关于javascript - 将更改监听器附加到循环中的 jquery-chosen 选择,不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31809114/

相关文章:

javascript - jQuery 对话框中的箭头

jquery - 将类添加到 tr 的第三个子级(从索引 2 到 4)

jquery - 无法选择/jquery 来运行事件

javascript - org.thymeleaf.exceptions.TemplateInputException : Exception parsing document: template ="result", 第 28 行 - 第 23 列

javascript - 如何使用 Canvas 元素显示图形

javascript - 动态填充的大型菜单

jquery - 无法将背景图像属性设置为无

jQUery 选择的库和 fancybox

javascript - 如何动态改变元素?

javascript - 延迟 javascript 函数并仅显示一次