在Jquery中,如果我有一个包含不同元素的div,例如select、搜索输入框等,在我点击页面上div之外的位置时,如何使div淡出,但我仍然可以点击select并在搜索输入框中输入而不会消失?感谢您的帮助。 -nick
在Jquery中,如果我有一个包含不同元素的div,例如select、搜索输入框等,在我点击页面上div之外的位置时,如何使div淡出,但我仍然可以点击select并在搜索输入框中输入而不会消失?感谢您的帮助。 -nick
Code Duck的答案不完整,因为如果您单击DIV本身(仅限外部),则需要使其不逐渐消失。 所以假设您的“menu” DIV应该淡出。
jQuery("#menu").click(function(){ return false; });
jQuery(document).one("click", function() { jQuery("#menu").fadeOut(); });
one 的使用比 bind/unbind 更加简洁。如果使用 one,则不需要显式地从文档中解绑特定的 click 处理程序,因此这里并不真正需要命名空间事件。
return false 只是表示“停止冒泡此事件到文档”。我知道这是一个比较旧的问题,但是我写了一个扩展来为元素添加clickOutside函数:
$.fn.extend({
// Calls the handler function if the user has clicked outside the object (and not on any of the exceptions)
clickOutside: function(handler, exceptions) {
var $this = this;
$("body").bind("click", function(event) {
if (exceptions && $.inArray(event.target, exceptions) > -1) {
return;
} else if ($.contains($this[0], event.target)) {
return;
} else {
handler(event, $this);
}
});
return this;
}
使用此功能,您可以轻松完成以下操作:
}
$("#menu").clickOutside(function(event, obj) { obj.fadeOut() });
许多模态对话框使用部分透明的覆盖层来覆盖整个页面,表示对话框具有焦点。我认为这是实现您想要的最好方法。如果您真的不想使页面变暗或变灰,您可以将覆盖层完全设为透明。请查看Facebox进行示例。
$("#menu").click(function(){
$(document).unbind("click");
$("#menu").show();
$("#menu").bind('mouseout',function(){
$(document).bind("click",function(){$("#menu").fadeOut();});
});
});
看这里
演示在此
$('#menuBtn').click(function(e) {
e.stopPropagation();
$('.navMenuSecWrapper').fadeToggle();
return false;
});
$(document).click(function() {
$('.navMenuSecWrapper').fadeOut();
});
$(document)
上绑定一个点击处理函数。$(document).click(function(){
$(this).unbind('click');
$('#menu').fadeOut();
}
var d = openSomeDiv(); d.click(...); jQuery(document).click(...);
- jpsimons