2015-09-28 5 views
1

У меня есть массив, содержащий объекты jquery, которые позже упоминаются в разных частях кода. Я помещаю их в массив, так что они выбираются только один раз, вместо того, чтобы делать jquery каждый раз, когда мне нужно получить к ним доступ.Связать событие jquery с массивом объектов jquery

Мой вопрос в том, как связать событие jquery с массивом этих объектов jquery?

Я использовал, чтобы сделать JQuery выбора на идентификаторы элементов, а затем связать событие:

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

Теперь у меня есть этот массив объектов JQuery. Как связать их с событием jquery?

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

Я попытался сделать это, но это не сработало:

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

Я бы, конечно, вопрос, почему они хранятся как объекты JQuery в массиве, а не просто элементы DOM. Или почему массив не является самим объектом jQuery, содержащим только элементы dom. –

+0

Я хотел, чтобы я не делал выбор jQuery на этих элементах снова и снова и решил сделать выбор один раз и сохранить объекты jQuery в массиве. Это объекты jQuery, потому что команды jQuery выполняются на них во всем коде. – AndeeC

ответ

5

Can петлю над ними:

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

Поскольку bind() использует on() внутренне я переключился использовать on() вместо этого.

Альтернатива будет просто хранить селекторы

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

Я думаю, что это поможет понять, как вы даже прибыли в получении этого массива создан. Существуют, вероятно, другие подходы в зависимости от использования и того, что вы пытаетесь выполнить.

+0

Спасибо. Я тоже подумал о том, чтобы пройти через них, но я просто не был уверен, есть ли лучший способ сделать это, поэтому я подумал, что спрошу. – AndeeC

+0

Я предпочитаю не хранить только селектора (за ваше второе предложение), потому что я использую эти объекты jquery в других частях кода. Поэтому, чтобы избежать необходимости постоянно выполнять jquery, выбирайте эти элементы каждый раз, когда я хочу получить к ним доступ, я сохраняю jquery objs в массиве один раз, а затем получаю доступ к этим объектам во всем коде. – AndeeC

+0

но как создается массив? Может быть проще оставить его в объекте jQuery, сохраненном как переменная – charlietfl

0

Как объясняется в 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){ 
 
\t 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>

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