我在各种解决方案中进行了搜索,但似乎都没有。为此,我回到这里与您一起寻找解决方案。我创建了这种窗口来共享和自定义我网站的内容。问题是,当我想关闭时,我想点击 div (黑色区域)。对不起英语,但我是意大利人。
`http://jsfiddle.net/34uLs/`
我在各种解决方案中进行了搜索,但似乎都没有。为此,我回到这里与您一起寻找解决方案。我创建了这种窗口来共享和自定义我网站的内容。问题是,当我想关闭时,我想点击 div (黑色区域)。对不起英语,但我是意大利人。
`http://jsfiddle.net/34uLs/`
如果在外部单击,这个问题确实是隐藏 div 的副本
但是在这种情况下,由于深色背景#shead
是最顶部的元素,因此应将点击事件附加到它。如果单击事件附加到$(document)
对象,它将永远不会到达它,因为#shead
会捕获它。
解决方案:
/** The event should be binded with this element **/
$('#shead').click(function () {
$(this).toggleClass("open");
});
进一步阅读
一种可能的解决方案是 Ankit 推荐的解决方案(他似乎已经删除了他的帖子)。这是它的一个 jsfiddle 示例:http: //jsfiddle.net/drb9w/11/。然而,这确实有一个弱点,即应用于#share
元素的焦点对象的浏览器样式。
$('#moresh').click(function (event) {
var elt = $(this).attr('for');
$("#" + elt).toggleClass("open");
$("#share").focus();
});
$(function () {
$("#share").draggable();
});
$("#share").on('blur', function(event) {
$('#shead').removeClass("open");
});
这个怎么运作:
#share
元素,使其模糊(未聚焦)。#share
元素模糊时,删除open
该类。如果您想保持“for”属性的功能,请使用 on 函数的 data 参数。
有一种替代方法可以避免应用焦点装饰器的问题#share
:向父元素(似乎覆盖整个屏幕)注册一个点击侦听器,该元素阻止其激活,#share
如下所示:
$('#moresh').on('click', function(event) {
var elt = $(this).attr('for');
$("#" + elt).toggleClass("open");
function onBodyClick(event) {
$(this).off('click', '', onBodyClick);
$(this).removeClass('open');
}
$("#" + elt).on('click', onBodyClick);
});
$(function() {
$("#share").draggable();
});
$("#share").on('click', function(event) {
event.stopPropagation();
});