提问人:Andrew G. Johnson 提问时间:12/9/2010 最后编辑:Andrew G. Johnson 更新时间:12/10/2010 访问量:1012
当在jQuery中使用不同的点击侦听器时,如何忽略一个模糊侦听器?
How can I ignore one blur listener when a different click listener is used in jQuery?
问:
所以这很难用一句话来表达,但这里有一个简单的例子:
<html>
<head>
<title>Example</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
<!--
$(document).ready(function() {
$("#input").focus(function() {
$("#p").show();
}).blur(function() {
$("#p").hide();
});
$("#p").click(function() {
alert("Thanks for clicking me");
});
});
-->
</script>
</head>
<body>
<input type="text" id="input" />
<p id="p" style="background:red;display:none"">
Click me.
</p>
</body>
</html>
基本上,当您专注于输入时,会出现一个段落,而当焦点模糊时,段落会消失。但是,段落上还有一个单击侦听器,因此当您单击它时,会出现一个警告消息框。问题是当我聚焦输入框时,段落出现[预期],但是当我单击该段落时,首先注册了输入框的模糊,因此该段落在浏览器检测到我单击它之前就被隐藏了。
答:
2赞
PetersenDidIt
12/9/2010
#1
试试 Ben Alman 的 jQuery Outside 事件插件
那么你的代码将是:
$(document).ready(function() {
$("#input").focus(function() {
$("#p").show();
}).bind('focusoutside', function(event) {
if (!$(event.target).is('#p')) {
$("#p").hide();
}
});
$("#p").click(function() {
alert("Thanks for clicking me");
// Do this if you need to hide #p after doing
// whatever click on p really does.
$(this).hide();
});
});
通过使用 focusoutside 事件,它将捕获单击和 Tab 键,并让您根据焦点的位置来决定想要执行的操作。#input
示例:http://jsfiddle.net/petersendidit/WSEWh/2/
评论
0赞
mikesir87
12/9/2010
那么你不需要点击函数中的$(“#p”).hide()吗?
0赞
PetersenDidIt
12/9/2010
@mikesir87 取决于他被点击时想做什么。但很可能是的。#p
0赞
mikesir87
12/9/2010
听起来很棒!我不知道如何使用事件对象,所以这非常有用。谢谢!
评论