我创建了一个日期选择器,它使用ajax填充id为calendarContainer的元素。当用户点击按钮以启动日历时,我希望用户能够在日历旁边的任何其他位置点击并隐藏它。 calendarContainer是dom的根源,我已经尝试了所有我能想到的工作。
当没有点击时,我已经让日历消失了。但是,当我点击日历时,它也会消失。我只希望日历在没有点击时消失。
以下是我尝试过的所有事情。
$(":not(#calendarContainer > table)").live('click', function() { $.Calendar.hide(); });
$(":not(#calendarContainer").live('click', function() { $.Calendar.hide(); });
$(":not(#calendarContainer)").click(function() { $.Calendar.hide(); });
$("body:not(#calendarContainer)").click(function() { $.Calendar.hide(); });
$(":not(#calendarContainer, #calendarData)").live('click', function() { $.Calendar.hide(); });
感谢任何帮助,Metropolis
答案 0 :(得分:1)
您看到这种行为是因为事件冒泡,当您点击日历时,您仍然会点击每个元素的父元素,因为它会冒泡。要阻止这种情况,你需要停止泡泡,如下所示:
$("body").click(function() { $.Calendar.hide(); });
$("#calendarContainer").click(function(e) {
e.stopPropagation(); //Stop click from bubbling to the body element
});
答案 1 :(得分:0)
你需要选择一些东西。确实
$("*:not(#calendarContainer").live('click', function() { $.Calendar.hide(); });
工作?
答案 2 :(得分:0)
您应该看一下点击outside plug in。基本上它正在做的是在body元素上设置click事件,然后比较事件目标,看它是否等于你需要的选择器并停止传播。