jQuery: делегировать самому себе?

Прежде всего скажу, что я использую старую версию библиотеки jQuery (а именно 1.4.2). Обновление до jQuery 1.7 займет некоторое время (особенно для поиска ошибок), поэтому я ищу решение, которое работает в версии 1.4.2.

Я хочу написать функцию:

function _setupGui($domNode, selector){
  $domNode
    .delegate(selector, 'mouseenter', function(){ /* do smth awesome */ }
    .delegate(selector, 'mouseleave', function(){ /* do smth awesome */ }
    .delegate(selector, 'click', function(){ /* do smth awesome */ }
}

и иметь возможность предоставить селектор, который позволяет выбрать «я».

Есть ли селектор, который вы можете передать делегату, который позволяет выбрать узел, содержащий делегирование?

В jQuery 1.7 $domNode.on('click', null, function(){/*handler*/}) делает именно это и является фактической реализацией $domNode.delegate(null, 'click', function(){/*handler*/}). Однако в 1.4.2 последний ничего не делает.

Это изменение семантики по сравнению с предыдущими версиями?


person LeGEC    schedule 15.12.2011    source источник
comment
Чем это отличается от простого добавления обработчика к элементу вместо делегирования? Может быть, я неправильно понимаю.   -  person James Montagne    schedule 15.12.2011
comment
@James: нет, это просто единая точка входа для привязки событий   -  person LeGEC    schedule 15.12.2011


Ответы (1)


Я думаю, что вы действительно хотите прикрепить обработчики непосредственно к элементу и вообще не использовать delegate. Ты мог бы просто справиться с этим сам. Возможно, что-то вроде этого, где передача «я» означает просто присоединение событий:

function _setupGui($domNode, selector){
    if(selector == "self"){
        $domNode
          .mouseenter(function(){ /* do smth awesome */ })
          .mouseleave(function(){ /* do smth awesome */ })
          .click(function(){ /* do smth awesome */ })
    }else{
        $domNode
          .delegate(selector, 'mouseenter', function(){ /* do smth awesome */ })
          .delegate(selector, 'mouseleave', function(){ /* do smth awesome */ })
          .delegate(selector, 'click', function(){ /* do smth awesome */ })
    }
}
person James Montagne    schedule 15.12.2011
comment
Что я хочу сделать, так это прикрепить обработчики непосредственно к элементу, но с использованием согласованных средств, которые не застревают в дебатах bind(), live(), on() и.... Я думаю, что on() была попыткой сделать это, но ИМХО это равносильно сахарному покрытию, а вы знаете, что жуки любят сахар. Я остановился на делегате(), потому что это аутсайдер в борьбе, и все оставляют его в покое. Я позволяю всему подниматься до тела или документа, потому что падение производительности незначительно, если учесть, что в основном это происходит, когда что-то делает человек, что не так часто в масштабе времени компьютеров. - person DaveWalley; 23.08.2014