单击任何位置,但在元素上隐藏它与if语句

以下解决方案

我已经阅读了关于这个概念的大多数问题,但我似乎无法使用if语句。 有帮助吗?

的jsfiddle

$("button").click(function () { $("div").fadeToggle("fast"); }); if ($("div").is(":visible")) { $(document).click(function () { $("div").fadeToggle("fast"); }); $("div").click(function (e) { e.stopPropagation(); }); } 

所以,按钮应该切换div。 切换div(即:visible )时,只应通过单击页面上的任何位置切换回(不可见)div,但不能单击div本身。

我将Diabolic的答案和Kevin Bowersox的答案结合到了这个 答案中 。

 $("button").click(function (e) { $("div").fadeToggle("fast"); e.stopImmediatePropagation(); }); $(document).click(function (e) { if($("div").is(":visible") && !$("div").is(e.target)) { $("div").fadeOut("fast"); } }); 

使用Javascript

 $("button").click(function (e) { $("div").fadeToggle("fast"); }); $(document).mouseup(function(event){ var target = $("#no-mod"); if(!target.is(event.target) && !$("button").is(event.target) && target.is(":visible")){ $("div").fadeToggle("fast"); }else{ return false; } }); 

HTML

  

示例: http : //jsfiddle.net/2udYp/9/

请检查您的代码更新:

 $("button").click(function (e) { $("div").fadeToggle("fast"); e.stopPropagation(); }); $("div").click(function (e) { $("div").fadeIn("fast"); e.stopPropagation(); }); $(document).click(function (e) { $("div").fadeToggle("fast"); e.stopPropagation(); }); 

你的代码应该更像这样;

 $("button").click(function (e) { $("div").fadeToggle("fast"); e.stopImmediatePropagation(); }); $(document).click(function () { if($("div").is(":visible")) { $("div").fadeToggle("fast"); } }); $("div").click(function (e) { e.stopImmediatePropagation(); }); 

为什么?

因为您没有在运行时绑定事件。 你是在一个没有立即发生的声明中做的,当它发生时它只是创建一个事件,而不是立即运行它。

我尽量少编辑你的代码。 🙂

附加信息:并使用stopImmediatePropagation()而不是stopPropagation()来确保在该行之后不会执行其他事件。

这是你正在寻找的行为吗?

 $(document).click(function (e) { $("div").fadeToggle("fast"); e.stopPropagation(); }); $("button").click(function (e) { $("div").fadeToggle("slow"); e.stopPropagation(); }); $("div").click(function (e) { e.stopPropagation(); }); 

修改小提琴

编辑代码:

 $(document).click(function (e) { $("div").fadeToggle("fast"); e.stopPropagation(); if($("div").is(':visible')){ $("div").click(function (e) { e.stopPropagation(); }); } }); $("button").click(function (e) { $("div").fadeToggle("slow"); e.stopPropagation(); }); 

改良小提琴2

编辑2:

 (document).click(function (e) { if($("div").is(':visible')){ $("div").fadeToggle("fast"); } $("div").click(function (e) { e.stopPropagation(); }); }); $("button").click(function (e) { $("div").fadeToggle("slow"); e.stopPropagation(); }); 

改良小提琴3

对于这个,你真的不需要很多IF语句。 伪代码,您希望单击上的任意位置以隐藏按钮,但单击按钮以执行其他操作。 您可以使用.on('click', function() . . . .click().on('click', function() . . .来实现此目的。

请参阅以下代码:

 $('body').click(function(e) { if(e.target.id == "btn"){ $('#box').show(); } else { if(e.target.id !== 'box') { $('#box').hide(); } } }); 

……和你的加价:

   

你可以在这个JSFIDDLE上看看这个

我想说一些重要的事情。 如果您正在动态创建元素,请不要使用.live()因为它已被折旧。 使用.on() ,可以在这里的文档中找到 。


除此之外,上面的代码完美无瑕。 我想指出这个答案是可扩展的 – 与其他人一起*你可能需要在e.preventDefault()引用的每个元素中放置e.preventDefault()或类似内容。 此代码将来不需要任何更改。