Как связать несколько обработчиков событий для hoverIntent? - PullRequest
1 голос
/ 02 апреля 2011

У меня есть следующий код в одном из моих файлов js

$('#elementID').hoverIntent({
    over: function() {//function#1 body},
    out: function() {// function#2 body}
});

и в другом из моих файлов js я хочу добавить другой метод в hoverIntent.Но новая привязка перезаписывает предыдущую, и будет выполняться только новая.

$('#elementID').hoverIntent({
    over: function() {//function#3 body}
});

, поэтому я хочу, чтобы и функция # 1, и функция # 3 выполнялись при наведении.

таково, чтовозможно ли с hoverIntent?

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

ПРИМЕЧАНИЕ. У меня нет разрешения на изменение первого файла.Я просто хочу добавить дополнительную функциональность для парения.

Спасибо.

Ответы [ 3 ]

1 голос
/ 31 октября 2012

Я знаю, что это старый вопрос, но он возник при поиске, поэтому я включаю здесь свой ответ на случай, если кто-нибудь еще столкнется с ним.

Плагин hoverIntent не предназначен для обработки несколькихобратные вызовы, так что я исправил версию, которая есть.Он не полностью протестирован на совместимость с разными браузерами, но, поскольку все сделано через API jQuery, все должно быть в порядке.

Github link

0 голосов
/ 02 апреля 2011

Один из способов - изменить плагин hoverIntent так, чтобы его переменная конфигурации cfg была общедоступной.После строки cfg = $.extend(cfg, g ? { over: f, out: g } : f ); в плагине добавьте:

cfg = $.extend(cfg, g ? { over: f, out: g } : f );
$.fn.hoverIntent.cfg = cfg;

Затем вы можете сделать это:

$("#elementID").hoverIntent({
    over:   function(){ $(this).val("over"); },
    out:    function(){ $(this).val("out"); }
});

var cfg = $("#elementID").hoverIntent.cfg;
$.extend(cfg, { over: function(){ $(this).val("new over"); } });
$("#elementID").hoverIntent(cfg);

Это не идеально, но я не уверен в другом способесделать это без изменения плагина, расширения переменной конфигурации и повторной инициализации #elementID.

ОБНОВЛЕНИЕ 1:

Я ранее неправильно понял запрос OP.Ему нужны были функции № 1 и № 3, но не № 2 для запуска:

$("#elementID").hoverIntent({
    over:   function(){ //function #1 },
    out:    function(){ //function #2 }
});

var cfg = $("#elementID").hoverIntent.cfg;
var oldOver = cfg.over; // function #1

$.extend(cfg, { 
    out: false,
    over: function(){
    oldOver(); // call oldOver aka function #1 above
    // function #3
}});
$("#elementID").hoverIntent(cfg);

ОБНОВЛЕНИЕ 2:

Мое решение выше не работает, потому что оно простосоздает глобальную переменную для cfg, которая затем модифицируется любым дополнительным использованием $.hoverIntent.

Вот еще один удар по ней с использованием метода $.data() вместо:

После строки cfg = $.extend(cfg, g ? { over: f, out: g } : f ); в плагине добавьте:

cfg = $.extend(cfg, g ? { over: f, out: g } : f );
$(this).data('cfg', cfg);

Затем:

$("#elementID").hoverIntent({
    over:   function(){ //function #1 },
    out:    function(){ //function #2 }
});

var cfg = $("#elementID").data('cfg');
var oldOver = cfg.over; // function #1

$.extend(cfg, { 
    out: false,
    over: function(){
    oldOver(); // call oldOver aka function #1 above
    // function #3
}});
$("#elementID").hoverIntent(cfg);
0 голосов
/ 02 апреля 2011

Мне кажется, что плагин hoverIntent не настроен для поддержки нескольких обработчиков событий. Вам, вероятно, придется пропатчить код hoverIntent, чтобы это работало.

...