return false误区onclick|submit=fn(return false)不能阻止默认行为

在大多数情况下,为事件处理函数返回false,可以防止默认的事件行为,众所周知,在表单中加上onsubmit="return false;"可以阻止表单提交。在超链接中加上onclick="return false;"可以阻止打开超链接。

 return false 作用 :

         在大多数情况下,为事件处理函数返回false,可以防止默认的事件行为. 
众所周知,在表单中加上onsubmit="return false;"可以阻止表单提交。
在超链接中加上onclick="return false;"可以阻止打开超链接。
 

 

在函数中,经常看见

  1. function  fn(){  
  2. //语句体   
  3. return false;  
  4. }  

在网上搜索一下,无一不说“return false 是为了阻止象<a href="#" > <input type="submit">等的默认事件行为,不让<a>点击时发生默认点击行为打开链接,不让表单默认情况下提交表单”。

但是,你看看下面这样写:

  1. <a href="www.163.com" onclick="fn()"> 点击我 </a>
  2. <script> 
  3. function fn(){  
  4. alert(1212);  
  5. return false;  
  6. }  
  7. </script> 

点击链接,根本不能阻止<a>默认打开href中链接的行为,
我们修改一下onclick中的值:
 

  1. <a href="www.163.com" onclick=return fn() "> 
或者写成:
  1. <a href="www.163.com" onclick="fn();return false;"> 



同样地,
由表单中onsubmit="return false;"想到的;

众所周知,在表单中加上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>


大家判断像上面的写法,点击submit按钮该表单是否提交?

 

若答案为是,就不用往下看了。

若答案为否,错了。实际情况是表单正常提交,若想它不提交,应该将 
 

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

改为 
 

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

 

为何?

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

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

代码
 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中的重载要松散得多。

<think>我们讨论的是JavaScript中的return语句,特别是returntrue和returnfalse的区别。根据引用[1][2][3][4],我们可以总结如下:1.return语句用于结束函数的执行,并返回一个值(如果有的话)。2.在函数中,return可以单独使用(即return;),这时函数返回undefined。3.returntrue和returnfalse都是返回一个布尔值,true表示真,false表示假。但是,在JavaScript中,returntrue和returnfalse在某些场景下有特殊的作用,尤其是在事件处理函数中。根据引用[3]和[4]:-在事件处理函数中,返回false可以阻止事件的默认行为。例如,在表单提交事件中返回false,可以阻止表单提交。-返回true则允许事件的默认行为发生。例如:```javascriptdocument.getElementById("myForm").onsubmit=function(){//验证表单if(验证失败){returnfalse;//阻止表单提交}returntrue;//允许表单提交};```另外,returnfalse在jQuery事件处理函数中还有阻止事件冒泡的作用(即同时调用event.preventDefault()和event.stopPropagation())。但在原生JavaScript中,returnfalse只能阻止默认行为不能阻止事件冒泡。要阻止冒泡,需要使用event.stopPropagation()。总结区别:1.基本区别:-returntrue:返回布尔值true,表示函数执行成功或条件满足。-returnfalse:返回布尔值false,表示函数执行失败或条件不满足。2.在事件处理中的特殊行为:-returnfalse阻止事件的默认行为(如表单提交、链接跳转等)[^3][^4]。-returntrue:允许事件的默认行为。3.在普通函数中,它们只是返回一个布尔值,没有额外的行为。注意事项:-在事件处理函数中,如果不需要阻止默认行为,可以不返回值(即返回undefined)或者返回true,效果相同(因为默认行为会继续执行)。但是返回false阻止默认行为。-在jQuery事件处理函数中,returnfalse同时阻止默认行为和冒泡,而在原生事件处理中,returnfalse阻止默认行为。示例:1.阻止链接跳转:```html<ahref="https://example.com"onclick="returnfalse;">点击不会跳转</a>```或者```html<ahref="https://example.com"onclick="myFunction();returnfalse;">点击</a>```2.表单验证:```html<formonsubmit="returnvalidateForm()">...</form>```在validateForm函数中,如果验证失败,返回false表单不会提交;如果验证成功,返回true,表单提交。3.普通函数中:```javascriptfunctionisEven(num){returnnum%2===0;//返回true或false}```因此,returntrue和returnfalse在事件处理函数中具有特殊意义,而在普通函数中仅作为布尔返回值。相关问题:1.在JavaScript事件处理函数中,如何同时阻止默认行为和事件冒泡?2.在jQuery中,returnfalse与event.preventDefault()和event.stopPropagation()有何关系?3.如果事件处理函数返回undefined,会有什么效果?4.如何理解在HTML事件属性(如onclick)中写的"returnfunction()"中的return?</think>### JavaScript 中 `return true` 与 `return false` 的用法与区别详解 在 JavaScript 中,`return true` 和 `return false` 是控制函数行为和事件处理的关键机制,它们的主要区别在于**对程序流程的影响**和**对默认行为阻止作用**。以下是核心区别和使用场景: --- #### 🛑 一、核心区别 | **特性** | `return true` | `return false` | |------------------|----------------------------|----------------------------| | **返回值** | 布尔值 `true` | 布尔值 `false` | | **流程影响** | 允许代码继续执行 | 立即终止后续操作 | | **事件行为** | **不阻止**默认事件行为 | **阻止**默认事件行为[^3] | | **典型场景** | 验证通过、操作成功 | 验证失败、取消操作 | --- #### 🧩 二、关键用法详解 1. **阻止默认事件行为(核心作用)** 在事件处理函数中,`return false` 会**阻止浏览器默认行为**,而 `return true` 允许其继续执行[^3][^4]: ```javascript // 阻止链接跳转 document.querySelector('a').onclick = function() { if(condition) return false; // 点击后不跳转 }; // 阻止表单提交 document.forms[0].onsubmit = function() { if(!validateForm()) return false; // 阻止提交 return true; // 允许提交 }; ``` 2. **控制函数执行流程** 在普通函数中,它们作为布尔返回值控制逻辑分支: ```javascript function isPrime(n) { if(n < 2) return false; // 立即终止并返回 for(let i=2; i<=Math.sqrt(n); i++){ if(n % i === 0) return false; } return true; // 通过所有检查 } ``` 3. **在异步操作中的特殊表现** ```javascript button.addEventListener('click', async () => { const success = await fetchData(); return success; // 无法阻止默认行为! }); ``` > ⚠️ 注意:在**异步事件处理函数**中,`return false` **无法阻止默认行为**,必须使用 `event.preventDefault()`[^3]。 --- #### ⚙️ 三、不同场景下的行为对比 | **场景** | `return true` 效果 | `return false` 效果 | |------------------------|----------------------------------------|-----------------------------------------| | **HTML 事件属性**<br>(`onclick="..."`) | 允许默认行为(如链接跳转)[^3] | **阻止**默认行为(链接不跳转)[^3][^4] | | **DOM 事件监听**<br>(`addEventListener`) | 仅返回值,不影响行为 | 仅返回值,**不阻止默认行为**[^3] | | **jQuery 事件** | 允许默认行为 | **同时阻止默认行为和冒泡** | | **普通函数** | 返回 `true` 并退出 | 返回 `false` 并退出 | --- #### 🛠️ 四、正确使用模式 1. **阻止默认行为的现代写法** 优先使用 `event.preventDefault()` 替代 `return false`: ```javascript form.addEventListener('submit', (e) => { if(!valid) { e.preventDefault(); // 明确阻止提交 return false; // 可选,但非必须 } }); ``` 2. **条件验证链** ```javascript function processData(data) { if (!data) return false; if (!validateType(data)) return false; return transformData(data); // 返回处理结果 } ``` 3. **jQuery 的特殊处理** 在 jQuery 事件中,`return false` 等效于: ```javascript event.preventDefault(); event.stopPropagation(); ``` --- #### ❌ 常见错误 ```javascript // 错误1:在异步函数中依赖 return false 阻止行为 async function handleSubmit() { await validate(); return false; // 无法阻止表单提交! } // 错误2:混淆返回值与行为阻止 element.addEventListener('click', () => { if(condition) return false; // 无效!必须用 preventDefault() }); ``` ### 总结 - ✅ **`return true`**: 表示"允许继续",在验证函数中表示条件满足,在事件中允许默认行为发生。 - 🚫 **`return false`**: 表示"立即停止",在验证中表示失败,在 **HTML 事件属性中能阻止默认行为**,但在现代事件监听中需配合 `preventDefault()`。 - ⚠️ **重要提示**: 在 `addEventListener` 注册的事件中,`return false` **不会阻止默认行为**,必须显式调用 `event.preventDefault()`[^3][^4]。 --- #### 相关问题 1. 在 `addEventListener` 中使用 `return false` 为何无法阻止表单提交? 2. jQuery 事件处理中 `return false` 与原生 JavaScript 有何不同? 3. 如何设计一个既返回布尔值又阻止事件冒泡的函数? 4. 异步操作中如何正确实现"取消"逻辑? [^1]: JavaScript 返回语句的核心作用 [^2]: `return true` 与 `return false` 的布尔值差异 [^3]: `return false` 在阻止默认行为中的应用 [^4]: 表单提交场景中 `return false` 的必要性
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值