栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在元素外部单击时触发事件的指令

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在元素外部单击时触发事件的指令

我不会使用event.stopPropagation(),因为它确实会引起您在解决方案A中看到的那种问题。如果可能,我还将求助于模糊和聚焦事件。将下拉列表附加到输入后,可以在输入失去焦点时将其关闭。

但是,处理文档上的单击事件也不是很糟糕,因此,如果要避免多次处理同一单击事件,只需在不再需要它时将其与文档解除绑定即可。除了在下拉列表之外单击时要评估的表达式之外,该指令还需要知道它是否处于活动状态:

app.directive('clickAnywhereButHere', ['$document', function ($document) {    return {        link: function postlink(scope, element, attrs) { var onClick = function (event) {     var isChild = $(element).has(event.target).length > 0;     var isSelf = element[0] == event.target;     var isInside = isChild || isSelf;     if (!isInside) {         scope.$apply(attrs.clickAnywhereButHere)     } } scope.$watch(attrs.isActive, function(newValue, oldValue) {     if (newValue !== oldValue && newValue == true) {         $document.bind('click', onClick);     }     else if (newValue !== oldValue && newValue == false) {         $document.unbind('click', onClick);     } });        }    };}]);

使用指令时,只需提供另一个表达式,如下所示:

<your-dropdown click-anywhere-but-here="close()" is-active="isDropdownOpen()"></your-dropdown>

我尚未测试您的onClick功能。我认为它按预期工作。希望这可以帮助。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/633495.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号