zoukankan      html  css  js  c++  java
  • javascript return false 详解

    在大多数情况下,为事件处理函数返回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中的重载要松散得多

  • 相关阅读:
    The Python Standard Library
    Python 中的round函数
    Python文件类型
    Python中import的用法
    Python Symbols 各种符号
    python 一行写多个语句
    免费SSL证书(https网站)申请,便宜SSL https证书申请
    元宇宙游戏Axie龙头axs分析
    OLE DB provider "SQLNCLI10" for linked server "x.x.x.x" returned message "No transaction is active.".
    The operation could not be performed because OLE DB provider "SQLNCLI10" for linked server "xxx.xxx.xxx.xxx" was unable to begin a distributed transaction.
  • 原文地址:https://www.cnblogs.com/wspblog/p/4689915.html
Copyright © 2011-2022 走看看