当元素多层嵌套的时候,每层都有点击事件,它就会发生冒泡,一层一层的触发,但有时候我们只想触发某一层,不想让其他层的事件触发,这就需要阻止冒泡事件了。

以angular项目为例,我们都知道angularJS中的执行方法都会自带一个$event,这个$event就是当前事件的对象,通过它来阻止冒泡。

在html中写一个ng-click事件:

注意给方法传递参数 $event.

在对应的controller中,添加阻止冒泡:

触发事件,传参数 $event

在事件中添加 $event.stopPropagation(); 阻止冒泡。

self.test = function($event){

$('#showMenus').css('display', 'block');

$event.stopPropagation();

}

更官方的示例:

查看angular的官方api文档,可以看出,angular对ng事件(例如:ng-click、ng-blur、ng-dblclick等等),添加了一个$event变量。

其实无论是js还是jq抑或是angular,阻止冒泡的关键都在于抓取event/$event

angular 中ngEventDirs.js:

var ngEventDirectives = {};

forEach(

'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste'.split(' '),

function(name) {

var directiveName = directiveNormalize('ng-' + name);

ngEventDirectives[directiveName] = ['$parse', function($parse) {

return {

compile: function($element, attr) {

var fn = $parse(attr[directiveName]);

return function(scope, element, attr) {

element.on(lowercase(name), function(event) {

scope.$apply(function() {

fn(scope, {$event:event});

});

});

};

}

};

}];

}

);

在上边代码我们可以得到两个信息:

Angular支持的event:click 、dblclick 、mousedown 、mouseup、 mouseover 、mouseout 、mousemove、 mouseenter、 mouseleave、 keydown、 keyup、 keypress 、submit、 focus、 blur、 copy 、cut 、paste

Angular在执行事件函数时候传入了一个名叫 $event的常量,该常量即代表当前event对象,如果你在Angular之前引入了jQuery那么这就是jQuery的event.

那么我们可以利用event的stopPropagation来阻止事件的冒泡

html 传参阻止冒泡,angular阻止冒泡事件相关推荐

  1. 微信小程序使用onfire.js(事件订阅和分发JavaScript 库)实现跨页面传参,对onfire的全面了解

    开发微信小程序时,页面间数据传送多采用URL方式传参.添加全局变量,对于在本地缓存不大实用(感觉操作缓存,应该性能会有一定的损耗吧).而从新打开的页面回到之前的界面,貌似只有放在本地缓存.添加全局变量 ...

  2. vue3子组件给父组件传参

    子组件传参: const emit = defineEmits(['自定义事件名字A']) // 给父组件传参 emit('自定义事件名字A',数据) 父组件接收参数: <子组件标签名 @自定义 ...

  3. vue路由传参的四种方式

    vue路由传参 一.router-link路由导航 父组件: 使用<router-link to = "/跳转路径/传入的参数"></router-link> ...

  4. 组件传参的终极版,事件车,父子传参的祖宗。

    如果简单的组件传参父子,子父传参就够了,但是如果兄弟之间传参就比较麻烦了, 事件车. 最后的还可以关闭 监听消息@click="$root.$off('msg1')

  5. js事件冒泡、阻止事件冒泡以及阻止默认行为

    大家好,我是IT修真院武汉分院web第17期的学员吴三水,一枚正直纯洁善良的web程序员. 今天给大家分享一下,修真院官网js(职业)任务四,深度思考中的知识点--js事件冒泡.阻止事件冒泡以及阻止默 ...

  6. JS 事件高级(包括DOM事件流,阻止事件冒泡,阻止事件默认行为,,,以及对我来说,很好用的 事件代理)

    事件对象概念 事件处理函数:事件发生时调用的函数 事件对象:window.event,内置的对象,事件发生的时候会将所有和事件相关的信息都存储在事件对象中,鼠标位置,事件类型,事件目标... //事件 ...

  7. JavaScript停止冒泡和阻止浏览器默认行为

    原文链接:http://caibaojian.com/javascript-stoppropagation-preventdefault.html 事件兼容 function myfn(e){ var ...

  8. 利用事件冒泡和阻止事件冒泡的例子

    利用事件冒泡机制 页面中的评分界面,大家一定都很熟悉,现在假如我开了一家饭店,我需要一个在我们的网页上能让顾客对我的饭店进行打分.首先,我们需要两张星星的图片,一张是灰的的星星,一张是黄色的星星,我们 ...

  9. vue事件修饰符:通过@click.self的self属性来阻止内层向外层冒泡

    知识点: 事件流 当一个HTML元素产生一个事件时,该事件会在元素节点与根节点之间的路径传播,路径所经过的节点会收到该事件,这个传播的过程叫做DOM事件流 事件又分为 冒泡事件 捕获事件 冒泡事件 微 ...

最新文章

  1. Linux shell 学习笔记(5)— 文件权限(添加、修改、删除用户及创建、修改群组)
  2. Eclipse 使用maven管理发布web项目在tomcat里面只有java文件没有class文件
  3. vi / vim 字符替换详解
  4. requests库入门09-OAUTH认证
  5. 程序员的自我修养(2)——计算机网络(转) good
  6. Phoenix+Hbase二级索引
  7. java自定义sql查询条件_mybatis-plus QueryWrapper自定义查询条件的实现
  8. 如何暴力破解wifi密码
  9. jenkins下载插件下载不了,解决办法
  10. linux查看日志相关命令
  11. 文本分类(2)——取特征词构建词典
  12. 常看:前端面试题搂搂
  13. PostgreSQL:“more than one owned sequence found“异常问题解决
  14. [翻译] Oracle Database 12c 新特性Multitenant - Cheney Shue
  15. Map container is already initialized.
  16. 大阪第83天——可怕的日本(转贴)
  17. 孙悟空先后取过三次经,儒经、道经与佛经
  18. requests使用socks代理
  19. 字体基础知识:衬线字体和无衬线字体
  20. 用普通话软件测试为什么分数都很低,有没有练习普通话的软件?练习普通话软件推荐...

热门文章

  1. 最全ToString(“X2“)和ToString(“X“)详解含义及使用
  2. 一路在赶,别忘了珍惜现在--《爱的太晚》古巨基
  3. 浅谈c/c++中main(),int main(),void main(),int main(void)四者之间的区别
  4. 五大免费企业网络入侵检测工具(IDS)
  5. 图片大小、感受野、目标大小的关系
  6. 2017年计算机专业研究课题,科研处-课题研究
  7. 2017第111届中国文化用品商品交易会(2017上海文化展)会刊(参展商名录)
  8. 【和UI斗智斗勇的日子】Android实现一个只有四个圆角有边框的边框
  9. guidance问题总结
  10. guidance使用方式问题