Web API - event.preventDefault( )

Event 接口的  preventDefault( ) 方法,告诉 user agent :如果此事件没有被显式处理,它默认的动作也不应该照常执行。此事件还是继续传播,除非碰到事件侦听器调用 stopPropagation( )stopImmediatePropagation( ) ,才停止传播。

- 语法

event.preventDefault();

- 参数

- 返回值

undefined

示例

- 阻止默认的点击事件执行

选中复选框是点击复选框的默认行为。下面这个例子说明了怎样阻止默认行为的发生:

JavaScript

document.querySelector("#id-checkbox").addEventListener("click", function(event) {
document.getElementById("output-box").innerHTML += "Sorry! <code>preventDefault()</code> won't let you check this!<br>";
event.preventDefault();
}, false);

HTML

<p>Please click on the checkbox control.</p>

<form>
<label for="id-checkbox">Checkbox:</label>
<input type="checkbox" id="id-checkbox"/>
</form> <div id="output-box"></div>

结果

- 在编辑域中阻止按键

下面这个例子演示如何用  preventDefault( )  在文本编辑域中阻止有效的文本输入。如今我们通常可以使用 原生的HTML表单验证 来代替。

HTML

<div class="container">
<p>Please enter your name using lowercase letters only.</p> <form>
<input type="text" id="my-textbox">
</form>
</div>

CSS

当用户按下一个有效按键时,我们就给这个 warning box 加上一些样式:

.warning {
border: 2px solid #f39389;
border-radius: 2px;
padding: 10px;
position: absolute;
background-color: #fbd8d4;
color: #3b3c40;
}

JavaScript

首先监听 keypress (en-US) 事件:

var myTextbox = document.getElementById('my-textbox');
myTextbox.addEventListener('keypress', checkName, false);

checkName( )  方法可以监听按键并决定是否允许按键的默认行为发生。

function checkName(evt) {
var charCode = evt.charCode;
if (charCode != 0) {
if (charCode < 97 || charCode > 122) {
evt.preventDefault();
displayWarning(
"Please use lowercase letters only."
+ "\n" + "charCode: " + charCode + "\n"
);
}
}
}

dislpayWarning( )  方法显示了一个问题的通知。这不是一种优雅的方法,但确实可以达到我们的目的。

var warningTimeout;
var warningBox = document.createElement("div");
warningBox.className = "warning"; function displayWarning(msg) {
warningBox.innerHTML = msg; if (document.body.contains(warningBox)) {
window.clearTimeout(warningTimeout);
} else {
// insert warningBox after myTextbox
myTextbox.parentNode.insertBefore(warningBox, myTextbox.nextSibling);
} warningTimeout = window.setTimeout(function() {
warningBox.parentNode.removeChild(warningBox);
warningTimeout = -1;
}, 2000);
}

结果

非小写a-z的键入均被拦截。

- 备注

在事件流的任何阶段调用  preventDefault( )  都会取消事件,这意味着任何通常被该实现触发并作为结果的默认行为都不会发生。

我们可以使用 Event.cancelable 来检查该事件是否支持取消。为一个不支持  cancelable  的事件调用  preventDefault( )  将没有效果。

规范

最新文章

  1. [NHibernate]一对多关系(级联删除,级联添加)
  2. 生产/消费 发送和接收消息---基于kombu和redis交互
  3. Dapper学习笔记(1)-开始
  4. Delphi Mac App 名称支持国际化多语显示
  5. js中的冒泡排序以及实现一个数组中得最到最大的数字小例
  6. Linux命令之nslookup
  7. delphi Pointer 转成string
  8. Signalr简单入门,使用注意点
  9. gcc 编译和链接
  10. 通过改变viewport 实现网站自适应
  11. Java源码学习:HashMap实现原理
  12. Linux常用监控命令简介 – vmstat,ps,free,uptime 等
  13. Java正则表达式过滤并消除非法字符
  14. python基础 ------ 集合
  15. CUBA在查询语句如何添加参数
  16. 自学Linux Shell16.3-函数递归+创建库
  17. 批量增删改&quot;_bulk&quot;
  18. [C#.Net]KeyDown(KeyUp)和KeyPress的区别
  19. saxbuilder用法
  20. Space Replacement

热门文章

  1. ASPX页面传参中文乱码处理
  2. CTF_论剑场_Web25
  3. Linux虚拟机配置SSH免密登录
  4. Java LinkedList【笔记】
  5. Redis雪崩和Redis穿透
  6. mysql导出word的表结构操作
  7. leaflet 的 marker 弹框 iframe 嵌套代码
  8. 11.SpringMVC之HttpMessageConverter
  9. 关于Ubuntu18.04 linux系统使用安装JDK Mysql
  10. CSS定位(慕课网学习笔记)