Using "return false;" in onclick Event in JavaScript

本文深入解析JavaScript中return false的用途,通过实例展示其如何阻止默认行为,以及如何用于简单的交互控制。同时,讨论了合理使用return false的重要性,并可能在后续文章中进行更详细的探讨。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

In my job, I have read the html files of many static webpages. It seems that people like to use the onclick JavaScript event with the window.open() JavaScript method to create links that open web content in new pages. The syntax is usually like this:

<a href="http://www.youkuaiyun.com" onclick="window.open(this.href); return false;" title="优快云">优快云</a>

Aftering seeing this so many times, I began to raise a question : what is the function of the "return false;" statement? I design some experiments and soon found out the answer.

<!--two windows would be opened-->
<a href="http://www.google.com.hk" target="_blank" 
onclick="window.open('http://www.youkuaiyun.com')">This is a link</a>

<!--return false to prevent default behaviour-->
<a href="http://www.google.com.hk" target="_blank" 
onclick="window.open('http://www.youkuaiyun.com'); return false;">This is a link</a>

This example above is straight forward. I compared the two links, one without "return false;" and one with it. The one without it would open two new windows when clicked as both the a link and the onclick event are triggered. The one with it would only open a window for 优快云. Why do they behave differently? It is because the"return false;" statement prevents the default behaviour of the browser, that is, opening a new window for Google.


You may think that the "return false;" statement is not so useful in the example above. Actually, we can do some simple interaction using the mechanism. For example, in the code below, the onclick event has the confirm() JavaScript method as its event handler. The confirm() method returns true when we click "OK" in the dialog box and false otherwise. Therefore, we can use the confirm() method to control whether the webpage in the a link would be opened.

<a href="http://www.google.com.hk" target="_blank"
onclick="return confirm('Are you sure?');">This is a link</a>


However, don't abuse the use of "return false;" in your webpages. It may be confusing and difficult to maintain sometimes. In simple inline event handler like the examples above, it is acceptable to use it. However, using it in complicated functions may cause unpredictable behaviours. I may write posts about it later to analyse the issue.   


Do you find it interesting? Share it with your friends if you like the post. I will try to dig out more secrets of JavaScript in the near future. 


@using HengJiuGamesManage.Models; @{ Layout = null; } @{ Users users = new Users(); if (ViewBag.UserModel != null) { users = ViewBag.UserModel; } } <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>恒久游戏管理系统</title> <meta name="renderer" content="webkit"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link href="~/Scripts/layui/css/layui.css" rel="stylesheet" /> <script src="~/Scripts/jquery-3.4.1.js"></script> <style> .layui-footer { display: flex; justify-content: center; } </style> </head> <body> <div class="layui-layout layui-layout-admin"> <div class="layui-header"> <div class="layui-logo layui-hide-xs layui-bg-black">恒久游戏管理系统</div> <!-- 头部区域(可配合layui 已有的水平导航) --> <ul class="layui-nav layui-layout-left"> <!-- 移动端显示 --> <li class="layui-nav-item layui-hide-xs"><a href="javascript:;">nav 1</a></li> <li class="layui-nav-item layui-hide-xs"><a href="javascript:;">nav 2</a></li> <li class="layui-nav-item layui-hide-xs"><a href="javascript:;">nav 3</a></li> <li class="layui-nav-item"> <a href="javascript:;">nav groups</a> <dl class="layui-nav-child"> <dd><a href="javascript:;">menu 11</a></dd> <dd><a href="javascript:;">menu 22</a></dd> <dd><a href="javascript:;">menu 33</a></dd> </dl> </li> </ul> <ul class="layui-nav layui-layout-right"> <li class="layui-nav-item layui-hide layui-show-sm-inline-block"> <a href="javascript:;"> <img src="//unpkg.com/outeres@0.0.10/img/layui/icon-v2.png" class="layui-nav-img"> @users.UserName </a> <dl class="layui-nav-child"> <dd><a href="javascript:;" onclick="ModifyInfo()">个人资料</a></dd> <dd><a href="javascript:;" onclick="ModifyPassword()">修改密码</a></dd> <!-- 新增修改密码菜单 --> <dd><a href="javascript:;" onclick="Exit()">退出登录</a></dd> </dl> </li> <li class="layui-nav-item" lay-header-event="menuRight" lay-unselect> <a href="javascript:;"> <i class="layui-icon layui-icon-more-vertical"></i> </a> </li> </ul> </div> <div class="layui-side layui-bg-black"> <div class="layui-side-scroll"> <!-- 左侧导航区域(可配合layui已有的垂直导航) --> <ul class="layui-nav layui-nav-tree" lay-filter="test"> <!-- 完整保留原有游戏分类布局 --> <li class="layui-nav-item layui-nav-itemed"> <a class="" href="javascript:;">游戏大类</a> <dl class="layui-nav-child"> <dd><a href="javascript:;">王者荣耀</a></dd> <dd><a href="javascript:;">永劫无间</a></dd> <dd><a href="javascript:;">三角洲行动</a></dd> <dd><a href="javascript:;">解限机</a></dd> </dl> </li> <li class="layui-nav-item"> <a href="javascript:;">权限管理</a> <dl class="layui-nav-child"> <dd><a href="javascript:;">普通用户</a></dd> <dd><a href="javascript:;">管理员</a></dd> <dd><a href="javascript:;">超级管理员</a></dd> </dl> </li> <li class="layui-nav-item"><a href="javascript:;">帮助</a></li> </ul> </div> </div> <div class="layui-body"> <!-- 内容主体区域 --> <div style="padding: 15px;"> <blockquote class="layui-elem-quote layui-text"> Layui 框体布局内容主体区域 </blockquote> <div class="layui-card layui-panel"> <div class="layui-card-header"> 下面是充数内容,为的是出现滚动条 </div> <div class="layui-card-body"> </div> </div> <br><br> </div> </div> <div class="layui-footer" style="justify-content: center;"> Copyright © 2025 Layui MIT Licensed 免责声明开源协议 在线测试 广告赞助 静态主题 </div> </div> <!-- 修改密码弹窗 --> <div id="passwordModal" style="display: none; padding: 20px;"> <form class="layui-form"> <div class="layui-form-item"> <label class="layui-form-label">原密码</label> <div class="layui-input-inline"> <input type="password" name="OldPassword" lay-verify="required|pass" placeholder="请输入原密码" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">新密码</label> <div class="layui-input-inline"> <input type="password" name="NewPassword" id="newPass" lay-verify="required|pass|passcheck" placeholder="请输入新密码" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">确认密码</label> <div class="layui-input-inline"> <input type="password" id="confirmPass" lay-verify="required|passcheck" placeholder="请再次输入新密码" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-form-item"> <div class="layui-input-block"> <button class="layui-btn" lay-submit lay-filter="changePass">立即修改</button> <button type="reset" class="layui-btn layui-btn-primary">重置</button> </div> </div> </form> </div> <script src="~/Scripts/layui/layui.js"></script> <script> //JS layui.use(['element', 'layer', 'form', 'util'], function () { var element = layui.element; var layer = layui.layer; var form = layui.form; var util = layui.util; var $ = layui.$; //头部事件 util.event('lay-header-event', { menuLeft: function (othis) { // 左侧菜单事件 layer.msg('展开左侧菜单的操作', { icon: 0 }); }, menuRight: function () { // 右侧菜单事件 layer.open({ type: 1, title: '公告', content: '<div style="padding: 15px;">公告1</div>', area: ['260px', '100%'], offset: 'rt', // 右上角 anim: 'slideLeft', // 从右侧抽屉滑出 shadeClose: true, scrollbar: false }); } }); // 表单验证 form.verify({ pass: [/^[\S]{6,12}$/, '密码必须6-12位且不能包含空格'], passcheck: function (value) { if ($('#newPass').val() && $('#confirmPass').val() && $('#newPass').val() !== $('#confirmPass').val()) { return '两次输入的密码不一致'; } } }); // 提交事件 form.on('submit(changePass)', function (data) { // TODO: 添加密码修改逻辑 console.log(data.field); layer.msg('提交成功', { icon: 1 }); return false; }); }); //退出 function Exit() { $.ajax({ url: "/Home/ExitSession", type: "post", success: function (res) { if (res.code == 0) { layer.msg(res.msg, { icon: 6, time: 2000 }, function () { window.location.href = "/Login/Index"; }) } else { layer.msg(res.msg, { icon: 5, time: 2000 }); } } }) } // 修改资料弹窗 function ModifyInfo() { layer.open({ type: 2, // page 层类型 area: ['669px', '638px'], title: '资料修改', shade: 0.5, // 遮罩透明度 shadeClose: false, // 点击遮罩区域,关闭弹层 maxmin: false, // 允许全屏最小化 anim: 0, // 0-6 的动画形式,-1 不开启 content: '/Home/ModifyBaseInfo', end: function () { // 刷新当前页面 location.reload(); } }); } // 修改密码弹窗 function ModifyPassword() { layer.open({ type: 1, title: '修改密码', area: ['450px', '300px'], content: $('#passwordModal'), success: function () { layui.form.render(); } }); } </script> </body> </html>using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using HengJiuGamesManage.Models; namespace HengJiuGamesManage.Controllers { public class HomeController : Controller { ReturnJsonData jsonData = new ReturnJsonData(); public ActionResult Index() { //获取服务器中存储的session数据 var sessionUsers = System.Web.HttpContext.Current.Session["Users"]; if(sessionUsers == null) { return Redirect("/Login/Index"); } //强制转化 Users users = sessionUsers as Users; //赋值 ViewBag.UserModel = users; return View(); } public ActionResult ExitSession() { //删除session 变量 Session.Remove("Users"); var sessionUsers = System.Web.HttpContext.Current.Session["Users"]; if (sessionUsers == null) { jsonData.code = 0; jsonData.msg = "退出成功,请稍后"; } else { jsonData.code = 1; jsonData.msg = "网络不稳定,请重新尝试"; } return Json(jsonData); } public ActionResult ModifyBaseInfo() { var sessionUsers = System.Web.HttpContext.Current.Session["Users"]; if (sessionUsers == null) { return Redirect("/Login/Index"); } return View(); } public ActionResult GetUserInfo(Users users) { try { // 1. 获取当前用户 ID(或从表单隐藏域获取) var userId = users.ID; // 2. 查询数据库中的用户 using (var db = new AoutEntities()) { var user = db.Users.FirstOrDefault(u => u.ID == userId); if (user == null) { return Json(new { code = 1, msg = "用户不存在" }); } // 3. 更新用户信息(根据表单字段赋值) user.UserCode = users.UserCode; user.UserName = users.UserName; user.Sex = users.Sex; user.BirthDay = users.BirthDay; user.NativePlace = users.NativePlace; user.Email = users.Email; user.Tel = users.Tel; user.Address = users.Address; db.SaveChanges(); // 保存到数据库 var result = db.SaveChanges(); return Json(new { code = 0, msg = "修改成功" }); } } catch (Exception ex) { return Json(new { code = 1, msg = "修改失败:" + ex.Message }); } } } }这两段代码给出优化
07-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值