我有一个像按钮一样的 div 元素。此 div 可以(并且确实)包含更多子 div 和/或跨度、图像等。此外,该 div 上有一个“单击”事件,该事件会向下滑动子菜单。
每当我单击按钮时,我都会尝试显示和隐藏该子菜单,但当我在页面上的任何位置单击按钮外部时,我也会尝试隐藏它。
我的问题是我的页面上有多个按钮,因此对我event.stopPropagation()
不起作用,因为如果我单击一个按钮并出现子菜单,然后单击另一个按钮,则会event.stopPropagation()
阻止我的第一个 div 隐藏其子菜单。
我不能event.target
用来检查我是否点击了按钮,因为目标返回我正在点击的元素,它可以是我的按钮内的图像或我的按钮内的 div 内的 div,我不想去.parent().parent()...
检查它是否真的是我的按钮。
我已经在 google.com、jQuery UI datepicker 以及可能一百万个其他网站上看到过这种做法,乍一看它看起来很容易,但我不知道它是如何完成的。
这是按钮元素的标记:
<div id="testButton" role="button">
<div>xxxxx</div>
<div>xxxxx</div>
<span>john doe</span>
</div>
这是到目前为止的javascript:
(function($){
$.fn.button = function(options) {
var defaults = {
}
var options = $.extend(defaults, options);
return this.each(function() {
var button = $(this);
button.addClass('button');
button.on({
mouseover: function() {
button.addClass('hover');
},
mouseout: function() {
button.removeClass('hover');
},
click: function(e) {
button.toggleClass('clicked');
}
});
$(document).click(function(event){
console.log($(button).find(event.target));
// var element = event.target;
//
// if ($(element) != $(button)) {
// if (button.hasClass('clicked')) {
// button.removeClass('clicked');
// }
// }
});
});
};
})(jQuery);
谢谢。