如何识别弹出窗口外单击的时间?

时间:2015-02-17 09:42:11

标签: javascript jquery html dropdownbox

我有一个弹出窗口,在内部点击时消失,但我的目的是让它在外面点击时消失。

此时弹出窗口工作正常,但只要我在窗口内单击就会消失。当我在窗外点击时,它会停留。如何让它以不稳定的方式运作?

代码为:

function deselect(e) {
  $('.pop').slideFadeToggle(function() {
    e.removeClass('selected');
  });    
}

$(function() {
  $('.invite_room_btn').on('click', function() {
    if($(this).hasClass('selected')) {
      deselect($(this));               
    } else {
      $(this).addClass('selected');
      $('.pop').slideFadeToggle();
    }
    return false;
  });

  $('.close').on('click', function() {
    deselect($('.invite_room_btn'));
    return false;
  });
});

$.fn.slideFadeToggle = function(easing, callback) {
  return this.animate({ opacity: 'toggle', height: 'toggle' }, 'fast', easing, callback);
};

HTML就是:

<span class="invite_room_btn">
            <div class="messagepop pop">
            </div>
</span>

谢谢!

2 个答案:

答案 0 :(得分:15)

您的问题可以解释为&#34; 如何识别在弹出窗口外点击的时间&#34;?

如建议here,您可以通过差异工作,检查点击发生在除弹出窗口(以及最终其他一些元素)之外的任何地方

这可以通过以下方式实现:

HTML代码可能类似于:

<div id="popup" class="popup"> 
    Content
    <div>DIV inside</div>
</div>
<button id="open">Open</button>

虽然javascript是:

 $(document).ready(function () {
     $('#popup').hide()
 });

 $('#open').on('click', function () {
     $('#popup').show(500)
 });

 $(document).mouseup(function (e) {
     var popup = $("#popup");
     if (!$('#open').is(e.target) && !popup.is(e.target) && popup.has(e.target).length == 0) {
         popup.hide(500);
     }
 });

一些CSS样式的完整示例:http://jsfiddle.net/sLdmxda8/2/

答案 1 :(得分:1)

我用下面的代码想出来了!

$(document).ready(function () {
$('.messagepop').hide()
});


$('.invite_room_btn').on('click', function () {
    if($(this).hasClass("selected")) {
        var popup = $(".messagepop");
        popup.hide(150);
        $(".invite_room_btn").removeClass("selected");
    }
    else {
        $('.messagepop').show(150);
        $('.invite_room_btn').addClass("selected");
    }
});

$(document).mouseup(function (e) {
    var popup = $(".messagepop");
    if (!$('.invite_room_btn').is(e.target) && !popup.is(e.target) && popup.has(e.target).length == 0) {
        popup.hide(150);
 }
});

感谢您的帮助!