我不太确定您的问题是什么,但通常这么多使用 ID-s 会适得其反,尤其是当您使用具有非常强大的选择器引擎的库时。
function addChangeEvents(selector) {
//all your elements are in the selector, why bother with mapping them to an other array like object?
selector.change(function () {
var $this = $(this); //this is the element the change event is fired on
selector.each(function () { //selector is the "list" of all elements
//you can access all the elements of the selector
console.log(this); //here this is the element you are iterating over.
console.log(this.id);
console.log($this); //you can access the $this variable defied in the outer function
});
});
}
你可以这样称呼它:
addChangeEvents($('#filter select'));
该变量selector
将包含您需要的所有元素。即使在 addChangeEvents 代码执行后(在更改事件的回调中),它也将可用。
这回答了你的问题了吗?
编辑:
或者您正在映射,因为有多个选择列表:
<div id="filter">
<select id="s1"/>
<select id="s2"/>
<select id="s3"/>
</div>
<div id="other_filter">
<select id="s4"/>
<select id="s5"/>
<select id="s6"/>
</div>
etc...
在这种情况下,您可以多次调用 addChangeEvents 函数:
addChangeEvents($('#filter select'));
addChangeEvents($('#filter2 select'));
如果您添加如下类,您甚至可以遍历所有过滤器:
<div id="filter" class="filter">
<select id="s1"/>
<select id="s2"/>
<select id="s3"/>
</div>
<div id="filter2" class="filter">
<select id="s4"/>
<select id="s5"/>
<select id="s6"/>
</div>
<div id="filter3" class="filter">
<select id="s7"/>
<select id="s8"/>
<select id="s9"/>
</div>
然后选择具有给定类的元素:
$('.filter').each(function () {
addChangeEvents($(this).find('select'));
});