2

我刚刚注意到一些不寻常的事情。这就是我想要完成的:

  • 我希望在单击链接时显示 div

  • 当我单击文档中的其他位置时,我希望 div 消失

  • 当我单击 div 本身时,我不希望它消失

像这样的东西:

http://jsfiddle.net/XPmyF/

JS:

(function() {
    var box = $('#box');
    $(document).on('click', function() {
        if (box.css('display') == 'block') {
            box.css('display', 'none');
        }
    });
    $('#start').on('click', function(e) {
        box.css({
            'text': 'Box',
            'position': 'absolute',
            'top': '50px',
            'left': '0',
            'background': '#EEE',
            'border': '1px solid #555',
            'width': '200px',
            'height': '50px',
            'display': 'block'
        });
        e.stopPropagation();
    });

    box.on('click', function(e) {
        e.stopPropagation();
    });
})();​

那个小提琴工作得很好,但是当我在 Firefox (15.0.1) 中测试它时,如果你右键单击 div,它就会消失,这不是我正在寻找的行为。似乎 stopPropagation() 适用于单击,但不适用于 Firefox 中的右键单击。Chrome 会阻止右键单击传播到文档。

我该如何解决?

谢谢

4

2 回答 2

5

使用 event.which 方法来检测点击了哪个按钮。这是jsfiddle中的一个示例。

$(document).on('click', function(event) {
    if (event.which == 1 && box.css('display') == 'block') {
        box.css('display', 'none');
    }
});
于 2012-09-14T19:26:07.800 回答
0

编辑为实际工作...

很抱歉,活动没有按预期进行。你可以用鼠标悬停来处理它。

(function() {
var box = $('#box');
var clicky = true;
$(document).on('click', function() {
    if (box.css('display') == 'block' && clicky) {
        box.css('display', 'none');
    }
});
$('#start').on('click', function(e) {
    box.css({
        'text': 'Box',
        'position': 'absolute',
        'top': '50px',
        'left': '0',
        'background': '#EEE',
        'border': '1px solid #555',
        'width': '200px',
        'height': '50px',
        'display': 'block'
    });
    e.stopPropagation();
});
box.mouseenter(function(e) {
    clicky = false;
});    
box.mouseout(function(e) {
    clicky = true;
});

})();
于 2012-09-14T19:21:53.933 回答