用OR操作符链接多个Jquery事件
Chaining multiple Jquery events with OR operator
我正在创建一个当用户聚焦搜索框时向下滑动的面板。我不擅长Jquery,但仍在学习,我已经设法创建了基本的功能:
$(document).ready(function() {
$(".search-panel").hide();
$("#search_form [type='text']")
.focus(function() {
$(".search-panel").slideDown("fast");
})
.focusout(function() {
$(".search-panel").slideUp("fast");
});
});
有了这个基本功能,在文本框外点击将折叠面板我试图实现一组复杂的条件,其中:
IF (textbox.focus) { show search panel}
IF (texbox.losefocus) && ( NOT search-panel.mouseover)
&& ( NOT (anything-in-search-panel-is-focused) )
基本上,我需要确保用户没有悬停在面板上或以某种方式与面板交互,并且在我滑动文本框之前,文本框没有聚焦。
JsFiddle的当前情况:http://jsfiddle.net/b9g9d6gf/
您应该在文档上绑定一个click函数,而不是使用.focusout()
函数。
$(document).ready(function () {
$(".search-panel").hide();
$("#search_form [type='text']")
.focus(function () {
$(".search-panel").slideDown("fast");
});
$(document).click(function(e) {
if( !( $(e.target).is('#search_form *')) ){
$(".search-panel").slideUp("fast");
}
});
});
如果在任何地方单击文档,它将查看目标是否不是#search_form
中的元素。如果没有,它将向上滑动.search-panel
。
注意:
我删除了标签,并将跨度更改为标签。单击标签还将(取消)选中其内部的复选框。有三个复选框会出错。因此,要么创建三个独立的标签(而不是span),要么删除它。
更新小提琴
Try this Working Demo
<script>
$(document).mouseup(function (e)
{
var container = $("#search_form");
if (!container.is(e.target) // if the target of the click isn't the container...
&& container.has(e.target).length === 0) // ... nor a descendant of the container
{
$(".search-panel").slideUp("fast");
}
else
{
$(".search-panel").slideDown("fast");
$("#search_form [type='text']").focus();
}
});
</script>
相关文章:
- 在创建对象后附加一个jquery事件
- 将jQuery事件应用于所有类元素
- Jquery事件处理程序仅适用于匿名函数
- 如何在jQuery事件处理程序中存储和重用超时
- 无线电输入更改的jQuery事件未启动
- 我应该/如何清除mousemove JQuery事件侦听器
- 是否可以在jQuery事件中更改Angular范围
- jQuery事件侦听器多次启动
- jQuery 事件处理程序堆叠
- 如何在不删除类似侦听器的情况下从父对象中删除jQuery事件侦听器
- 一个接一个地触发jQuery事件
- 在JQuery事件中查找父元素
- 堆叠jQuery事件(动画)
- 在jquery事件中引用javascript对象
- 动态添加对象的jQuery事件处理程序
- jQuery事件命名空间是否可以包含破折号
- Jquery事件绑定获胜'当作为方法调用时不起作用,但当直接在控制台中调用时会起作用
- 没有为Ajax添加的新元素注册Jquery事件
- 动态创建的DOM元素上的jQuery事件绑定
- jQuery事件未在动态生成的内容上激发