Как дать две функции для делегирования функции - PullRequest
1 голос
/ 18 июля 2011

Я использую JQuery и пытаюсь использовать delegate для действия hover. Проблема заключается в том, что при наведении мыши можно получить два обработчика: ручку и ручку. Как я могу добиться этого с помощью делегата?

Я пробовал это, и это не сработало:

 $(document).delegate('.box', 'hover',  
    function() { $(".a").addClass(".hover");}, 
    function() { $(".a").removeClass(".hover");});

Ответы [ 2 ]

5 голосов
/ 18 июля 2011

В соответствии с документами для .hover:

$(selector).mouseenter(handlerIn).mouseleave(handlerOut);

Таким образом, вы можете просто вызвать delegate один раз для каждой из этих функций:

$(document)
  .delegate('.box', 'mouseenter', function() { alert(1); })
  .delegate('.box', 'mouseleave', function() { alert(2); });
1 голос
/ 18 июля 2011

Альтернативой @ решению Джастина является проверка типа события в обратном вызове:

function onMouseenter()
{
    alert(1);
}
function onMouseleave()
{
    alert(2);
}

$(document).delegate('.box', 'hover', function(event)
{
    if (event.type === 'mouseenter') onMouseenter.apply(this, arguments);
    else onMouseleave.apply(this, arguments);
});

Тем не менее, нет необходимости использовать .delegate(), если вы просто собираетесь делегировать document. Вместо этого используйте .live(), что гораздо более кратко:

$('.box').live('hover', function (event)
{
    // snip...
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...