单击以显示然后单击另一个以隐藏它

时间:2012-11-12 14:14:20

标签: jquery triggers click

当用户点击我的<input>时,会显示一些<div>

然后用户点击了另一个元素agian,如<body>或另一个div,所以隐藏它

$("input").click(function(){
    $("div").fadeIn();
}).not(this).click(function(e){
    $("div").fadeOut();
});

游乐场:http://jsfiddle.net/Zf34Q/

我的代码fadeIn()&amp;同时fadeOut() :(

3 个答案:

答案 0 :(得分:6)

JQUERY

$("input").focus(function(){
    $("div").fadeIn();
}).blur(function(e){
    $("div").fadeOut();
});​

小提琴 - http://jsfiddle.net/Zf34Q/1/

修改

对不起选民,对不起我没有正确阅读问题,现在更新了我的答案

答案 1 :(得分:3)

你可以这样做:

$("input").click(function(){
    $("div").fadeIn();
    return false;
});
$(document).click(function(){
    $("div").fadeOut();
});

Demonstration

第一个回调返回false以避免事件传播到文档(这将启动fadeOut)。来自the documentation

  

从处理程序返回false等同于调用两者   事件对象上的.preventDefault()和.stopPropagation()。

在OP的精确情况下,

编辑:,因为元素是输入,所以最好使用atif089的解决方案和blur函数。我希望我的回答至少有助于澄清如何处理事件传播。

答案 2 :(得分:1)

只是补充@ atif089答案,并解释原始代码的错误:

创建选择器时this不是input,而是其他一些对象(可能是window)。如果你想让你的click处理程序触发任何其他元素,你必须将它绑定到页面上的每个其他元素,或者在一些常见的父元素上使用delegate events

@ atif089的回答有一个更实用的解决方案,通过利用焦点的变化。


使用":not"http://jsfiddle.net/Zf34Q/2/

的示例