将jquery事件绑定到jquery对象数组

时间:2015-09-28 18:25:13

标签: jquery jquery-events

我有一个包含jquery对象的数组,稍后会在代码的各个部分引用它们。我将它们放入一个数组中,这样它们只被选中一次,而不是每次我需要访问它时都进行jquery选择。

我的问题是,如何将jquery事件绑定到这些jquery对象的数组?

我曾经对元素的ID进行jquery选择,然后绑定事件:

$('#name, #domain, #description').bind("blur change", 
function () { 
    callEventHandler(this); 
});

现在我有了这个jQuery对象数组。如何将这些绑定到jquery事件?

var jqObjs = [$('#name'), $('#domain'), $('#description')];      

我尝试过这样做,但它没有工作:

$(jqObjs).bind("blur change", 
function () { 
    callEventHandler(this); 
});

2 个答案:

答案 0 :(得分:6)

可以循环遍历它们:

$(jqObjs).each(function(_, jQobj){
    jQobj.on("blur change",function () { 
       callEventHandler(this); 
    });
});

由于bind()在内部使用on(),我改为使用on()

另一种方法是存储选择器

var jqSelectors = ['#name', '#domain', '#description'];
$(jqObjs.join()).on('...

我认为这有助于理解你是如何创建这个数组的。可能还有其他方法取决于使用和您要完成的任务

答案 1 :(得分:1)

https://stackoverflow.com/a/44031991/430742中所述,您可以使用jQuery' s map()从数组中创建jQuery列表对象。然后,此对象可以与.on()一起使用,以将事件绑定到其元素。



var jqObjs = [$('#name'), $('#domain'), $('#description')];

var listObj = $.map(jqObjs, function(el){return el.get()});
$(listObj).on('click', function(ev){
	console.log('EVENT TRIGGERED');
});

button{
  display: block;
  margin: 10px;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<button id="name">Button 'name'</button>
<button id="domain">Button 'domain'</button>
<button id="description">Button 'description'</button>
&#13;
&#13;
&#13;