7

我有一个 div,我想在单击按钮时显示它,然后如果单击页面上除隐藏的 div 之外的任何其他位置(包括原始按钮),那么我希望 div 再次隐藏。

我想我已经很接近了,只是无法做到。这就是我到目前为止所拥有的(作为一个基本示例:

$(".clickme").click(function () {
    $(".toggletag").addClass('open');
});
if ( $('.toggletag').hasClass('open') ) {
    $("html").click(function () {
        $(".toggletag").removeClass('open');
    });
}

这是使用此代码的 JSfiddle:http: //jsfiddle.net/vgf6g/1/

我一开始尝试不使用 if 语句,但这当然会导致 html 点击覆盖按钮点击,从而导致 div 永远不会显示。

谢谢!

4

4 回答 4

5
// flag : says "remove class when click reaches background"
var removeClass = true;

// when clicking the button : toggle the class, tell the background to leave it as is
$(".clickme").click(function () {
    $(".toggletag").toggleClass('open');
    removeClass = false;
});

// when clicking the div : never remove the class
$(".toggletag").click(function() {
    removeClass = false;
});

// when click event reaches "html" : remove class if needed, and reset flag
$("html").click(function () {
    if (removeClass) {
        $(".toggletag").removeClass('open');
    }
    removeClass = true;
});

http://jsfiddle.net/vgf6g/3/

于 2013-10-17T08:34:24.850 回答
3

我认为这可以满足您的要求:

http://jsfiddle.net/ch94M/2/

$(".clickme").click(function (e) {
    $('.toggletag').toggleClass('open');
    e.stopPropagation()
});

$(document).click(function (e) {
    if (! $(e.target).hasClass('toggletag')) $(".toggletag").removeClass('open');
});
  1. 如果你先点击按钮,它会显示 div。如果再次单击它,它会隐藏。

  2. 如果单击隐藏的 div,现在可以查看它并不会隐藏。

  3. 如果您单击它隐藏的其他任何地方。

于 2013-10-17T07:17:44.860 回答
2

这有效:

$(document).click(function (e) {
    $el = $(e.target);
    if ($el.hasClass('toggletag')) {return false;}
    else if($el.hasClass('clickme')) {
        $(".toggletag").toggleClass('open');

    } else {
        $(".toggletag").removeClass('open');
    }
});

演示在这里

于 2013-10-17T07:20:29.710 回答
1

喜欢

$(".clickme").click(function (e) {
    e.stopPropagation();
    $(".toggletag").toggleClass('open');
});

$(document).click(function (e) {
    if(!$(e.target).closest('.toggletag').length){
        $(".toggletag").removeClass('open');
    }
});

演示:小提琴

于 2013-10-17T07:01:24.117 回答