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 последняя ничего не делает.

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

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 */ })
    }
}
Другие вопросы по тегам