在大多数情况下,为事件处理函数返回false,可以防止默认的事件行为.例如,默认情况下点击一个<a>元素,页面会跳转到该元素href属性指定的页. 
Return False 就相当于终止符,Return True 就相当于执行符。

在js中return false的作用一般是用来取消默认动作的。比如你单击一个链接除了触发你的 
onclick时间(如果你指定的话)以外还要触发一个默认事件就是执行页面的跳转。所以如果 
你想取消对象的默认动作就可以return false。

<input type="submit" onclick="submitAction(); return false;" />

submitAction 方法里面有提交表单的动作。如果不加 return false,在执行完 submitAction 之后,submit 按钮还会继续执行它的默认事件,就会再次提交表单。这可能就是很多错误的根源。

的确,return false的含义不是阻止事件继续向顶层元素传播,而是阻止浏览器对事件的默认处理。你可以这样试验:首先将所有的js脚本注释掉,在IE浏览器中尝试拖动一下图片,你会发现鼠标会成为禁止操作的样式,图片是被禁止拖动的,它是浏览器针对mousemove事件所提供的默认行为。return false就是为了去掉这种行为,否则就会出现你描述的中断事件连续执行。

另外,和return false等效的语句为:window.event.returnValue = false,你可以把return false替换为此语句并进行验证。

最后说明一下,此种方式只适用于IE浏览器。

众所周知,在表单中加上onsubmit="return false;"可以阻止表单提交。

<form action="index.jsp" method="post" onsubmit="submitTest();">    <INPUT value="www">    <input type="submit" value="submit"></form>
<SCRIPT LANGUAGE="JavaScript">    function submitTest() {        // 一些逻辑判断

return false;    }

</SCRIPT>
以上代码实际情况是表单正常提交,若想它不提交,应该将

<form action="index.jsp" method="post" onsubmit="submitTest();">

改为

<form action="index.jsp" method="post" onsubmit="return submitTest();">

为何?原来onsubmit属性就像是<form>这个html对象的一个方法名,其值(一字符串)就是其方法体,默认返回true;

在该方法体中你可以写任意多个语句,包括内置函数和自定义函数,如:

onsubmit=" alert('haha'); // 内置函数

submitTest();  // 自定义函数

alert(this.tagName); // 用到了this关键词

......(任意多条语句)

return false;"

就相当于

Form.prototype.onsubmit = function() {

alert('haha'); // 内置函数

submitTest();  // 自定义函数

alert(this.tagName); // 用到了this关键词

......(任意多条语句)

return false;};

这样的话你就覆写了(override)其默认方法(默认返回true)

大家注意到方法体中可以用this这个关键词,这里即代表了<form>的对象实例。

经过这样的分析后,以上情况就不难理解了:

代码 <form action="index.jsp" method="post" onsubmit="submitTest();">

这样写,override方法的效果为:

代码 Form.prototype.onsubmit = function() {    submitTest();};

在这里submitTest()虽然返回false,但我们只执行了此函数,没有对其结果进行任何处理。

而 代码 <form action="index.jsp" method="post" onsubmit="return submitTest();">
override方法的效果为:

代码 Form.prototype.onsubmit = function() {    return submitTest();};

这样,我们利用到了它的返回值,达到了预期效果。

结论: 我们可以用Java里的思维方式来思考模拟JavaScript中的类似情况(JavaScript中基于prototype的面向对象技术也确实是这样做的),但他们毕竟还是有本质上的区别,如Java是强类型的,有严格的语法限制,而JavaScript是松散型的。象上述方法: 
Form.prototype.onsubmit = function() {

};

既可以有返回值,又可以没有返回值,在Java里是通不过的,毕竟Java里面不能靠方法的返回值不同来重载(overload)方法,而JavaScript中的重载要松散得多

javascript return false 详解的更多相关文章

  1. javascript事件中'return false'详解

    浏览器中有很多异步事件,如click,mouseenter,mouseover等等,当用户执行相应操作之后,触发这个事件,然后执行相应的事件处理函数,一般情况下,我们可以通过三种方式给元素添加事件处理 ...

  2. JavaScript严格模式详解

    转载自阮一峰的博客 Javascript 严格模式详解   作者: 阮一峰 一.概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict m ...

  3. JavaScript数组方法详解

    JavaScript数组方法详解 JavaScript中数组的方法种类众多,在ES3-ES7不同版本时期都有新方法:并且数组的方法还有原型方法和从object继承的方法,这里我们只介绍数组在每个版本中 ...

  4. javascript 操作cookies详解

    javascript 操作cookies详解 这段操作cookies的方法我使用很久了,但是一直一来没遇到什么问题,今天在做一个在第一个页面保存了cookies,第二个页面获取或者第三个页面获取的功能 ...

  5. JavaScript(4)---BOM详解

    JavaScript(4)---BOM详解 之前写过一篇有关DOM的博客:JavaScript(2)---DOM详解 DOM有个顶级对象叫:document.同样BOM中也有顶级对象叫 window. ...

  6. 从mixin到new和prototype:Javascript原型机制详解

    从mixin到new和prototype:Javascript原型机制详解   这是一篇markdown格式的文章,更好的阅读体验请访问我的github,移动端请访问我的博客 继承是为了实现方法的复用 ...

  7. [转]javascript console 函数详解 js开发调试的利器

    javascript console 函数详解 js开发调试的利器   分步阅读 Console 是用于显示 JS和 DOM 对象信息的单独窗口.并且向 JS 中注入1个 console 对象,使用该 ...

  8. javascript 节点属性详解

    javascript 节点属性详解 根据 DOM,html 文档中的每个成分都是一个节点 DOM 是这样规定的:整个文档是一个文档节点每个 html 标签是一个元素节点包含在于 html 元素中的文本 ...

  9. (" use strict")Javascript 严格模式详解

    Javascript 严格模式详解 转载别人的博客内容,浏览了一遍,没有全部吸收,先保存一下链接 http://www.ruanyifeng.com/blog/2013/01/javascript_s ...

随机推荐

  1. [poj2184]我是来水一下背包的

    http://poj.org/problem?id=2184 题意:01背包的变种,就是说有2组值(有负的),你要取一些物品是2阻值的和非负且最大 分析: 1.对于负的很好处理,可以把他们都加上一个数 ...

  2. Moqui学习Day4

    添加一个新建表单 添加一个按钮来弹出新建表单,并创建一个转换来处理输入数据操作. 在FindTutorial.xml文件中添加一个转换. <!--新增 列表 --> <transit ...

  3. window下为apache配置ssl证书

    转载自 子非鱼 的博客稍作修改 第一步:依赖 配置Apache服务器支持https协议和SSL证书,最基本的要求是Apache包含openssl模块.还好apache/bin目录下有libeay32. ...

  4. Could not open Hibernate Session for transaction;

    javax.servlet.ServletException: org.springframework.transaction.CannotCreateTransactionException: Co ...

  5. JavaIO中的Reader和writer

    1.reader package com.io.Reader; import java.io.BufferedReader; import java.io.FileInputStream; impor ...

  6. window.parent ,window.top,window.self 详解

    在应用有frameset或者iframe的页面时,parent是父窗口,top是最顶级父窗口(有的窗口中套了好几层frameset或者iframe),self是当前窗口, opener是用open方法 ...

  7. 7.Android之评分条RatingBar和拖动条SeekBar学习

    评分条RatingBar和拖动条SeekBar很常见,今天来学习下. (1)RatingBar评分条 如图: <RelativeLayout xmlns:android="http:/ ...

  8. POJ 3273 Monthly Expense

    传送门 Time Limit: 2000MS Memory Limit: 65536K Description Farmer John is an astounding accounting wiza ...

  9. QA要懂的Linux命令

    <一>软件安装相关QA经常需要安装测试软件(jmeter.Mock.python环境搭建.java环境搭建),或者配置测试环境(nginx.ci等),需要了解linux下如何安装软件.在工 ...

  10. Android Studio使用教程

    http://blog.csdn.net/ryantang03/article/details/8948037 http://blog.csdn.net/ryantang03/article/deta ...