0

在下面的 jsFiddle 中,单击链接“单击以显示菜单”以显示附加了 jScrollPane 的绝对定位 div。开始拖动滚动条拇指,但让鼠标在滚动条右侧稍稍移动,然后松开鼠标。在 IE(版本 8、9、10)中,会在文档上生成一个点击事件,这会触发我们的代码隐藏菜单。在我测试过的所有其他浏览器(Firefox、Chrome、Safari)中,文档上没有生成这样的点击事件,并且菜单仍然显示(根据需要)。

在我们的 Web 应用程序中,我们希望在菜单之外的点击(即到达文档的那些)来隐藏菜单。但是,我们不希望菜单作为从滚动窗格本身启动的拖动的副作用而被隐藏。

是否有任何简单的解决方法可以避免此问题?可以以某种方式更新 jScrollPane 以避免该问题吗?

$(document).ready(function () {

    $('.scroll-pane').jScrollPane();

    $('#menu').click(function () {
        console.info('menu clicked');
        var api = $('.scroll-pane').show().data('jsp');
        api.reinitialise();

        return false;
    });

    $(document).click(function () {
        console.info('document clicked');
        $('.scroll-pane').hide();
    });

    $('.scroll-pane').bind('mousedown', function (ev) {
        console.info('scroll pane mousedown');
    }).bind('mouseup', function (ev) {
        console.info('scroll pane mouseup');
    }).bind('click', function (ev) {
        console.info('scroll pane click');
        return false;
    });
});

http://jsfiddle.net/catweazle/KWbhM/2/

4

1 回答 1

0

我以前也遇到过类似click的事件不一致。事实证明,IE 会click为鼠标在其上的任何元素触发事件mouseup,而不是在单击第一次开始时它结束的元素mousedown

https://stackoverflow.com/a/4606960/17803

换句话说 - 如果您在元素 A 上单击向下,但将鼠标移动到元素 B,然后释放,在 IE 中您将获得:

  • mousedown为一个
  • mouseup对于乙
  • click对于乙
于 2013-05-08T14:17:37.323 回答