JQuery: делегировать себя? - PullRequest
       21

JQuery: делегировать себя?

1 голос
/ 15 декабря 2011

Прежде всего, скажу, что я использую старую версию библиотеки 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 Ответ

1 голос
/ 15 декабря 2011

Я думаю, что вы действительно хотите присоединить обработчики непосредственно к элементу и не использовать 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 */ })
    }
}
...