博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript中return false;preventDefault();stopPragation()的区别
阅读量:7240 次
发布时间:2019-06-29

本文共 2595 字,大约阅读时间需要 8 分钟。

主要内容:

  • 区别的介绍
  • 代码演示区别
  • 建议

 

1. 区别的介绍

我们在平时的编码中javascript中经常会用到[return false;]语句来阻止事件的向上传递,其实[return false;]语句包含了2层意思:

  1. 阻止触发事件的元素的默认动作(比如说一个link(<a href=">),它的默认动作就是迁移到baidu首页)
  2. 阻止触发事件的元素向上传递事件

 

由于[return false;]包含了2个意思,所以在使用时首先要明确上面的2个阻止是否符合我们的预期。

如果我们在只想阻止元素的默认动作或者只想阻止元素向上传递事件的情况下误用了[return false;]的话,

那么在大量的代码中就很难调试出问题的所在了。

在javascript中其实有相应的函数分别实现上面的2个阻止,分别是:

  1. event.preventDefault() 阻止触发事件的元素的默认动作
  2. event.stopPragation()  阻止触发事件的元素向上传递事件

 

2. 代码演示区别

下面分5种情况用代码演示[return false;], [preventDefault()], [stopPragation()]的区别。

html代码:

            test js 事件阻止        

 

情况一,不使用[return false;], [preventDefault()], [stopPragation()]

默认的my.js的代码如下:

// init$(function(){    $("#parent").bind('click', fun_p);    $("#child").bind('click', fun_c);    $("#lnk").bind('click', fun_a);});function fun_p(){    alert('parent');}function fun_c(){    alert('child');}function fun_a(){    alert('link');}

在浏览器中打开html文件,点击其中的link("go to baidu!"),依次执行以下操作:

  1. 触发link的click事件alert('link')
  2. 向上传递click事件到父元素div(id为child的div),触发此div的click事件alert('child')
  3. 继续传递click事件到父元素div(id为parent的div),触发此div的click事件alert('parent')
  4. 执行link的默认动作,即迁移到baidu首页

 

情况二,使用[return false;]

my.js中的function fun_a里追加一行[return false;]

function fun_a(){    alert('link');    return false;}

在浏览器中打开html文件,点击其中的link("go to baidu!"),依次执行以下操作:

1. 触发link的click事件alert('link')

情况一中的2~4步被阻止了

 

情况三,使用[preventDefault()]

my.js中的function fun_a里追加一行[event.preventDefault()]

function fun_a(){    alert('link');    event.preventDefault();}

在浏览器中打开html文件,点击其中的link("go to baidu!"),依次执行以下操作:

  1. 触发link的click事件alert('link')
  2. 向上传递click事件到父元素div(id为child的div),触发此div的click事件alert('child')
  3. 继续传递click事件到父元素div(id为parent的div),触发此div的click事件alert('parent')

link的默认动作被函数[preventDefault()]阻止了

 

情况四,使用[stopPragation()]

my.js中的function fun_a里追加一行[event.stopPragation()]

function fun_a(){    alert('link');    event.stopPropagation();}

在浏览器中打开html文件,点击其中的link("go to baidu!"),依次执行以下操作:

  1. 触发link的click事件alert('link')
  2. 执行link的默认动作,即迁移到baidu首页

向上传递事件被函数[stopPragation()]阻止了

 

情况五,同时使用[preventDefault()]和[stopPragation()]

my.js中的function fun_a里追加两行[event.preventDefault()]和[event.stopPragation()]

function fun_a(){    alert('link');    event.preventDefault();    event.stopPropagation();}

在浏览器中打开html文件,点击其中的link("go to baidu!"),依次执行以下操作:

触发link的click事件alert('link')

与情况二一样,说明了[return false;]是包含了[preventDefault]和[stopPragation]两个功能的。

 

3. 建议

建议尽量使用[preventDefault]和[stopPragation]函数,

即使是在确实要使用[return false;]的地方,也可以上面的情况五那样用[preventDefault]和[stopPragation]来代替。

这样可以使代码的含义更加明确,可读性更好。

转载地址:http://tyybm.baihongyu.com/

你可能感兴趣的文章
Linux之ls命令
查看>>
twisted的defer模式和线程池
查看>>
.Net 配置文件——继承ConfigurationSection实现自定义处理类处理自定义配置节点
查看>>
Unity UI on hololens
查看>>
lsof -ntP -i:端口取出 动行程序的PID 然后xargs kill -9 这个进程
查看>>
论文笔记之:Conditional Generative Adversarial Nets
查看>>
转】从源代码剖析Mahout推荐引擎
查看>>
SPOJ GSS3 Can you answer these queries III[线段树]
查看>>
Linux软件安装
查看>>
怎么使用jquery判断一个元素是否含有一个指定的类(class)
查看>>
samba 最简单配置 共享
查看>>
看完这篇让你对各种前端build工具不再懵逼!
查看>>
围绕央行系统升级所产生的常见问题
查看>>
Ubuntu 配置有线网 IP
查看>>
SDWebImage源码解读之SDWebImageCache(上)
查看>>
ubuntu中查看各种设备和资源的命令汇总
查看>>
MyBatis学习(二)、SQL语句映射文件(1)resultMap
查看>>
xcache的使用与配置
查看>>
【转】Windows平台下的Subversion安装配置新手指南
查看>>
js-权威指南学习笔记7
查看>>