1

jQuery UI 工具提示的 open 事件不是在弹出窗口明显打开时触发,而是在鼠标进入元素时触发。它不服从 show.delay 属性设置。这是记录在案的行为,所以我认为这不是错误。

因此,如果我在表格的相邻单元格上有工具提示,并且用户将鼠标拖过这些单元格,则我的打开和关闭处理程序中的操作会执行多次——三、四、五次——与数字一样多老鼠进入的细胞。

如果 show.delay 尚未发生,有什么好方法可以退出 open 事件?

编辑:不知道 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);
    }
4

1 回答 1

1

如果我了解您的需求,我认为这可能会奏效:

工作示例

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");
    }
});
于 2013-09-18T14:38:35.517 回答