Самый короткий способ присоединения нескольких элементов DOM к одному обработчику событий с помощью Jquery? - PullRequest
5 голосов
/ 20 апреля 2010

Мне нужно прикрепить один обработчик событий к нескольким элементам DOM, используя jQuery. В настоящее время я достигаю этого, используя метод jQuery each () . Смотрите ниже:

$([elm1, elm2, elm3]).each(function() {
  this.click(eventHandler);
});

Мне было интересно, есть ли способ сделать это без использования каждого метода и замыкания. Я думал, что смогу сделать что-то вроде:

$(elm1, elm2, elm3).click(eventHandler);

Этот тип операторов работает с использованием Prototype.js, но не в jQuery. Причина, по которой я задаю этот вопрос, заключается в том, что после использования как Prototype.js, так и jQuery я обнаружил, что jQuery требует более простых операторов для выполнения одних и тех же задач почти во всех областях. поэтому я предполагаю, что должен быть лучший способ сделать это?


UPDATE

После некоторой отладки выясняется, что моя первоначальная попытка сделать это с помощью:

$([elm1, elm2, elm3]).click(eventHandler);

Сбой из-за того, что переменные elm1, elm2 и elm3 были созданы с использованием функции $ jQuery. Таким образом, проблема изменилась, и поэтому не работает следующее:

var elm1 = $('#elm1');
var elm2 = $('#elm2');
var elm3 = $('#elm3');

$([elm1, elm2, elm3]).click(eventHandler);

при использовании DOM: 1022 *

var elm1 = document.getElementById('elm1');
var elm2 = document.getElementById('elm2');
var elm3 = document.getElementById('elm3');

$([elm1, elm2, elm3]).click(eventHandler);

Ответы [ 2 ]

6 голосов
/ 20 апреля 2010

Вы можете сделать это как можно короче, как это:

$([elm1, elm2, elm3]).click(eventHandler);

Когда вы убираете скобки для массива, вы вызываете различную перегрузку jQuery(), когда в скобках вы передаете 1 аргумент в виде массива, поэтому вы вызываете jQuery(elementArray) конструктор.

1 голос
/ 20 апреля 2010

Это должно сработать:

$([elm1, elm2, elm3]).bind('click', function(){
    // your code here.....
});

JQuery предлагает даже сделать приведенный выше код короче, поэтому вы можете опустить bind там:

$([elm1, elm2, elm3]).click(function(){ 
  // your code here
});
...