2013-09-17 6 views
1

Открытое событие подсказки jQuery UI срабатывает не тогда, когда всплывающее окно открывается видимо, но как только мышь входит в элемент. Он не подчиняется настройке свойства show.delay. Это документированное поведение, поэтому я полагаю, что это не ошибка.Как открыть событие всплывающей подсказки jQuery UI, чтобы подчиняться настройке свойства show.delay

Итак, если у меня есть подсказка о смежных ячейках таблицы, и пользователь перетаскивает мышь через эти ячейки, действия в моих открытых и закрытых обработчиках принимаются несколько раз - три, четыре, пять раз - столько же как количество ячеек, введенных мышью.

Что хорошего для выхода из открытого события, если show.delay еще не выяснилось?

EDIT: Не зная, сколько времени прошло на delay.show, я должен был выбрать произвольную длительность для SetTimeout, а также отслеживать ли класс-переключатель находится в процессе использования флага:

 <snip> ... 
    show: { 
     delay: 666 
    }, 

    open: function (event, ui) { 
      if (me.changingClass) return;   
      me.changingClass = true; 
      $("td.baz").switchClass("foo", "bar"); 

    }, 
    close: function (event, ui, dupids) { 
     $("td.baz").switchClass("bar", "foo");   
     setTimeout(function() { me.changingClass = false; }, 200); 
    } 
+0

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

+0

Можете ли вы добавить достаточно кода для репликации вашей проблемы? – apaul

+0

Все, что вам нужно сделать для репликации, это прикрепить всплывающую подсказку к TDs таблицы. открывать и закрывать огонь сразу же при вводе мыши и мыши, а не после достижения порога show.delay. Поэтому, если пользователь перетаскивает мышь (быстро) по нескольким соседним ячейкам таблицы, вход в ячейку запускает открытое событие и оставляя ячейку для запуска события закрытия, поэтому, если мышь коснулась трех ячеек во время перемещения, эти события будут стрелять каждый три раза. – Tim

ответ

1

Я думаю, что это может сделать трюк, если я понимаю, что вы после:

Working Example

var timer; 
$('td').tooltip({ 
    show: { 
     delay: 2000 //number of milliseconds to wait 
    }, 
    open: function (event, ui) { 
     var xthis = this; 
     timer = setTimeout(function() { 
      $(xthis).siblings().switchClass("bar", "foo"); 
     }, 2000); // number of milliseconds to wait 
    }, 
    close: function (event, ui, dupids) { 
     clearTimeout(timer); 
     $(this).siblings().switchClass("foo", "bar"); 
    } 
}); 
+0

Спасибо за помощь. – Tim