默认行为及阻止

默认行为及阻止

浏览器以及HTML元素提供了一些默认行为,也可以称作默认事件。

默认行为

a标签点击跳转

<a>标签在href存在的情况下会点击自动跳转链接或者定位锚点,通过对<a>的监听事件阻止默认行为后,点击链接不会跳转。

html 复制代码
<a href="https://blog.touchczy.top" id="t1">点击跳转链接</a>
<script type="text/javascript">
    document.getElementById("t1").addEventListener("click", (e) => {
        e.preventDefault();
    })
</script>

鼠标右击显示菜单

在浏览器页面中鼠标右击会显示菜单,通过对document的监听事件阻止默认行为后,右击页面不会弹出菜单,当然也可以通过监听并组织默认行为制作自定义右键菜单。

html 复制代码
<script type="text/javascript">
    document.addEventListener("contextmenu", (e) => {
        e.preventDefault();
    })
</script>

input输入

<input>或者<textarea>获得焦点时敲击键盘会自动输入,阻止默认行为后,敲击键盘将不会输入,可以在这个事件监听下作输入数据过滤,例如只允许输入数字。

html 复制代码
<input id="t3" />
<script type="text/javascript">
    document.getElementById("t3").addEventListener("keydown", (e) => {
        e.preventDefault();
    })
</script>

复选框选中

复选框的默认行为下是点击选中获取取消选中,阻止默认行为后,点击将不会改变目前状态。

html 复制代码
<input id="t4" type="checkbox" />
<script type="text/javascript">
    document.getElementById("t4").addEventListener("click", (e) => {
        e.preventDefault();
    })
</script>

表单提交

表单中若是存在typesubmit<input>或者是<buttton>都会触发表单的提交,阻止默认行为后表单不会自动提交。

html 复制代码
<form action="./" id="t5">
    <input type="submit" name="btn" />
</form>
<script type="text/javascript">
    document.getElementById("t5").addEventListener("submit", (e) => {
        e.preventDefault();
    })
</script>

阻止默认行为

  • W3C推荐的阻止默认行为的方式是event.preventDefault(),此方法只会阻止默认行为而不会阻止事件的传播。
  • IE8及之前的浏览器阻止默认行为需要使用window.event.returnValue = false
  • 直接在事件处理函数中return false也能阻止默认行为,只在DOM0级模型中有效。此外,在jQuery中使用return false会同时阻止默认行为与事件传播。

示例代码

html 复制代码
<!DOCTYPE html>
<html>
<head>
    <title>默认行为及阻止</title>
</head>
<body>
    <a href="https://blog.touchczy.top" id="t1">点击跳转链接</a>
    <input id="t3" />
    <input id="t4" type="checkbox" />

    <form action="/" id="t5">
        <input type="submit" name="btn" />
    </form>

    <a href="https://blog.touchczy.top" id="t6">点击跳转链接</a>

</body>
<script type="text/javascript">
    document.getElementById("t1").addEventListener("click", (e) => {
        e.preventDefault();
    })

    document.addEventListener("contextmenu", (e) => {
        e.preventDefault();
    })

    document.getElementById("t3").addEventListener("keydown", (e) => {
        e.preventDefault();
    })

    document.getElementById("t4").addEventListener("click", (e) => {
        e.preventDefault();
    })

    document.getElementById("t5").addEventListener("click", (e) => {
        e.preventDefault();
    })

    document.getElementById("t6").onclick = (e) => {
        return false;
    }
</script>
</html>

每日一题

arduino 复制代码
https://github.com/WindrunnerMax/EveryDay

参考

bash 复制代码
https://segmentfault.com/a/1190000007681900
http://www.imooc.com/article/259535?block_id=tuijian_wz
https://developer.mozilla.org/zh-CN/docs/Web/API/Event/preventDefault
相关推荐
weixin_382395231 小时前
为小工厂量身打造:本地部署的物料管理系统带缺料计算
前端·制造
__zRainy__1 小时前
解决pnpm v10+不自动构建
前端·pnpm·工程化
猫猫不是喵喵.2 小时前
Vue3 Props 属性
前端·javascript·vue.js
醉城夜风~3 小时前
CSS元素显示模式(display)
前端·css
AI大模型-小华3 小时前
Codex 三方充值快速入门指南
java·前端·数据库·chatgpt·ai编程·codex·chatgpt pro
做前端的娜娜子6 小时前
同一链接实现 PC Web 与移动 H5 自适应
前端·掘金·金石计划
小帅不太帅6 小时前
架构没变、规模没变,DeepSeek V4 Flash 正式版凭什么暴涨 47 分?
前端·aigc·deepseek
jarvisuni6 小时前
DeepSeekFlash前端依旧拉垮,而且变慢了很多!
前端·javascript·算法
卷福同学7 小时前
AI编程出海第二步:验证关键词能否做站
前端·人工智能·后端