AngularJS:在鼠标点击外部时关闭下拉/弹出窗口元素的正确方法是什么?
AngularJS : What is the right way to close dropdown/popover element on outside mouse click?
如果我想为弹出窗口/工具提示/下拉菜单创建指令,应该在此事件后关闭,我应该在哪里设置外部点击的监听器?
我们为此创建了一个非常简单的指令:
'use strict';
yourmodule.directive('clickOutside', function($parse, $document){
return {
restrict: 'A',
link: function(scope, element, attr) {
var fn = $parse(attr.clickOutside);
$document.bind('click', clickOutsideHandler);
element.bind('remove', function () {
$document.unbind('click', clickOutsideHandler);
});
function clickOutsideHandler(event) {
event.stopPropagation();
var targetParents = $(event.target).parents();
var inside = targetParents.index(element) !== -1;
var on = event.target === element[0];
var outside = !inside && !on;
if (outside) scope.$apply(function() {
fn(scope, {$event:event});
});
}
}
};
});
像这样使用:
<div click-outside="handleClick($event)">...</div>
相关文章:
- Javascript更新孙窗口中的表单元素
- 如何在浏览器窗口变大/变小时捕捉元素的宽度
- 从html锚元素传递窗口对象
- 可以在调整窗口大小时重新调整stellar.js的元素偏移量
- Chrome应用程序在全屏中创建新窗口-html元素不是全高的
- 我需要帮助弄清楚一旦窗口的垂直高度被滚动,如何切换一个元素
- 将jquery ui窗口的父元素设置为另一个元素
- 如何获得一个进度元素,它被设置为在窗口调整大小时调整大小
- 使用JavaScript更改带有窗口高度的元素样式
- 如何将剑道UI窗口与页面上的另一个元素对齐
- 滚动窗口内的一个元素,该窗口具有滚动条
- 使用JQuery从窗口底部修复元素
- Jquery:当鼠标指针进入和离开元素时,创建一个弹出窗口
- 如何获得点击的元素'id并在jquery中打开一个弹出窗口
- 获取网页html元素值,而无需使用JavaScript在新窗口或新选项卡中打开页面
- 获取元素左侧的像素Javascript似乎只有在窗口稍微调整大小时才起作用
- 如何保持填充窗口的元素居中
- 是否可以在chrome的检查元素窗口中添加一个新选项卡
- 警告中心元素窗口(jQuery)
- JCarousel只运行在IE11当我有检查元素窗口打开