所以我为AngularJS中的切换(下拉)菜单做了一个指令。我将指令用于页面中的多个项目,但我有一个小问题。当一个项目打开并单击另一个项目时,我希望前一个项目关闭。event.preventDefault 和 event.stopPropagation 停止前一项的事件并且不会关闭它。有想法该怎么解决这个吗?有没有办法只在范围内停止事件?
app.directive('toggleMenu', function ($document) {
return {
restrict: 'CA',
link: function (scope, element, attrs) {
var opened = false;
var button = (attrs.menuButton ? angular.element(document.getElementById(attrs.menuButton)) : element.parent());
var closeButton = (attrs.closeButton ? angular.element(document.getElementById(attrs.closeButton)) : false);
var toggleMenu = function(){
(opened ? element.fadeOut('fast') : element.fadeIn('fast'));
};
button.bind('click', function(event){
event.preventDefault();
event.stopPropagation();
toggleMenu();
opened = ! opened;
});
element.bind('click', function(event){
if(attrs.stayOpen && event.target != closeButton[0]){
event.preventDefault();
event.stopPropagation();
}
});
$document.bind('click', function(){
if(opened){
toggleMenu();
opened = false;
}
});
}
};
这是一个小提琴: http: //jsfiddle.net/JknUJ/5/ 按钮打开内容,在 div 外部单击时内容应该关闭。当单击按钮 2 时,内容 1 不会关闭。