当用户点击我的<input>
时,会显示一些<div>
然后用户点击了另一个元素agian,如<body>
或另一个div,所以隐藏它
$("input").click(function(){
$("div").fadeIn();
}).not(this).click(function(e){
$("div").fadeOut();
});
游乐场:http://jsfiddle.net/Zf34Q/
我的代码fadeIn()
&amp;同时fadeOut()
:(
答案 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();
});
第一个回调返回false以避免事件传播到文档(这将启动fadeOut)。来自the documentation:
在OP的精确情况下,从处理程序返回false等同于调用两者 事件对象上的.preventDefault()和.stopPropagation()。
编辑:,因为元素是输入,所以最好使用atif089的解决方案和blur函数。我希望我的回答至少有助于澄清如何处理事件传播。
答案 2 :(得分:1)
只是补充@ atif089答案,并解释原始代码的错误:
创建选择器时this
不是input
,而是其他一些对象(可能是window
)。如果你想让你的click
处理程序触发任何其他元素,你必须将它绑定到页面上的每个其他元素,或者在一些常见的父元素上使用delegate events。
@ atif089的回答有一个更实用的解决方案,通过利用焦点的变化。
使用":not"
:http://jsfiddle.net/Zf34Q/2/