前面的话

  如果DOM结构发生变化,触发的是变动事件;如果文本框中的文本发生变化,触发的是文本事件

  HTML5为input控件新增了很多type属性,大大增加了input控件的应用场景。其中一个是type="range"的input控件,可以通过拖动游标改变value值,但并不是所有浏览器都可以实时显示,除了IE10+浏览器

<input type="range" min="0" max="10" step="0.5" value="6" />

  那么哪些文本事件可以实时监测游标变化呢?本文将以此为引子详细介绍文本事件

change

  说起文本变化,最先想到的可能就是change事件

  对于<input>和<textarea>元素,在它们失去焦点且value值改变时触发;对于<select>元素,在其选项改变时触发

<input id="test" value="请改变内容并移除焦点">
<script>
test.onchange = function(){
test.style.backgroundColor = 'pink';
}
</script>

  只有在IE浏览器下,change事件对游标实时变化起作用;其他浏览器下,必须松开鼠标后,change事件才起作用

<input id="test" type="range" min="0" max="10" value="6" />
<span id="result"></span>
<script>
test.onchange = function(){
result.innerHTML = test.value;
}
</script>

textInput

  DOM3级事件引人了一个新事件——textInput,用来替代keypress事件。当用户在可编辑区域中输入字符时,就会触发这个事件

  [注意]该事件只支持DOM2级事件处理程序,且只有chrome和safari浏览器支持

  textInput与keypress事件有两点不同

  【1】textInput事件只会在用户按下能够输入实际字符的键时才会被触发,而keypress事件则在按下那些能够影响文本显示的键时也会触发(如回车键)

  【2】任何可以获得焦点的元素都可以触发keypress事件,但只有可编辑区域才能触发textInput事件

<button id="test">按钮</button>
<script>
//控制台只输出1,不输出2
test.onkeypress = function(){console.log(1);}
test.addEventListener('textInput',function(){console.log(2)})
</script>
<input id="test">
<script>
//控制台以1-2的顺序输出
test.onkeypress = function(){console.log(1);}
test.addEventListener('textInput',function(){console.log(2)})
</script>

  由于textInput事件主要考虑的是字符,因此它的event对象中还包含一个dada属性,这个属性的值就是用户输入的字符

  比如用户在小写模式下,按下了S键,data值就是's',而如果在大写模式下按下该键,data的值就是'S'

<input id="test"><span id="result"></span>
<script>
test.addEventListener('textInput',function(e){
e = e || event;
result.innerHTML = e.data;
})
</script>

  由于<input type="range">的游标并不是可编辑区域,所以,textInput事件对游标变化无作用

input

  文本事件中,除了textInput事件,还有一个input事件

  HTML5新增了一个input事件,只要输入框内容发生变化就会立即触发,但通过javascript改变value时不会触发

  所以这事件与change事件的区别就是不需要移除焦点就可以触发

  [注意]该事件IE8-浏览器不支持

<input id="test">
<script>
test.oninput = function(){
this.style.background = 'pink';
}
</script>

  该事件可以在chrome/safari/firefox/IE9浏览器中,实时监测游标的变化

<input type="range" id="input"><span id="result"></span>
<script>
input.oninput = function(){
result.innerHTML = this.value;
}
</script>

propertychange

  IE有一个专有事件叫propertychange事件,该事件会在设置disable="true"时失效。propertychange触发函数只有一个默认参数,是所有可以触发属性的集合。该事件是在触发对象改变任何属性时都会触发

  [注意]IE11浏览器不支持

<input type="range" id="input"><span id="data"></span>
<script>
input.onpropertychange = function(){
data.innerHTML = this.value;
}
</script>

兼容

  如果要使游标变化实现全浏览器兼容,使用input和change事件可以实现

<input type="range" id="test"><span id="result"></span>
<script>
//通过userAgent检测IE浏览器
function isIE(){
var ua = navigator.userAgent;
//检测Trident引擎,IE8+
if(/Trident/.test(ua)){
//IE11+
if(/rv:(\d+)/.test(ua)){
return RegExp["$1"];
}
//IE8-IE10
if(/MSIE (\d+)/.test(ua)){
return RegExp["$1"];
}
}
//检测IE标识,IE7-
if(/MSIE (\d+)/.test(ua)){
return RegExp["$1"];
}
}
//IE浏览器
if(isIE()){
test.onchange = function(){
result.innerHTML = this.value;
}
//其他浏览器
}else{
test.oninput = function(){
result.innerHTML = this.value;
}
}
</script>

最后

  如果只考虑游标,而不考虑IE9-浏览器退化成文本框的情况,使用mousemove事件就可以实现实时监控数据变化的需求

深入理解DOM事件类型系列第五篇——文本事件的更多相关文章

  1. 深入理解DOM事件类型系列第三篇——变动事件

    × 目录 [1]删除节点 [2]插入节点 [3]特性节点[4]文本节点 前面的话 变动(mutation)事件能在DOM中的某一部分发生变化时给出提示,这类事件非常有用,但都只能使用DOM2级事件处理 ...

  2. 深入理解DOM事件类型系列第四篇——剪贴板事件

    × 目录 [1]定义 [2]对象方法 [3]应用 前面的话 剪贴板操作可能看起来不起眼,但是却十分有用,可以增强用户体验,方便用户操作.本文将详细介绍剪贴板事件 定义 剪贴板操作包括剪切(cut).复 ...

  3. 深入理解DOM事件类型系列第六篇——加载事件

    前面的话 提到加载事件,可能想到了window.onload,但实际上,加载事件是一大类事件,本文将详细介绍加载事件 load load事件是最常用的一个事件,当页面完全加载后(包括所有图像.java ...

  4. 深入理解ajax系列第五篇——进度事件

    前面的话 一般地,使用readystatechange事件探测HTTP请求的完成.XHR2规范草案定义了进度事件Progress Events规范,XMLHttpRequest对象在请求的不同阶段触发 ...

  5. 深入理解脚本化CSS系列第五篇——动态样式

    前面的话 很多时候,DOM操作比较简单明了,因此用javascript生成那些通常原本是HTML代码生成的内容并不麻烦.但由于浏览器充斥着隐藏的陷阱和不兼容问题,处理DOM中的某些部分时要复杂一些,比 ...

  6. C#微信公众号开发系列教程五(接收事件推送与消息排重)

    微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) C#微信公众号开发系列教程三(消息体签名及加解密) C ...

  7. 前端工程师技能之photoshop巧用系列第五篇——雪碧图

    × 目录 [1]定义 [2]应用场景 [3]合并[4]实现[5]维护 前面的话 前面已经介绍过,描述性图片最终要合并为雪碧图.本文是photoshop巧用系列第五篇——雪碧图 定义 css雪碧图(sp ...

  8. 深入理解DOM事件类型系列第二篇——键盘事件

    × 目录 [1]类型 [2]顺序 [3]按键信息[4]应用 前面的话 鼠标和键盘是电脑端主要的输入设备,上篇介绍了鼠标事件,本文将详细介绍键盘事件 类型 键盘事件用来描述键盘行为,主要有keydown ...

  9. 深入理解DOM事件类型系列第一篇——鼠标事件

    × 目录 [1]类型 [2]顺序 [3]坐标位置[4]修改键[5]相关元素[6]鼠标按键[7]滚轮事件[8]移动设备 前面的话 鼠标事件是web开发中最常用的一类事件,毕竟鼠标是最主要的定位设备.本文 ...

随机推荐

  1. 数据库sqlite 存储图片

    SQLite可以存储 BLOB(binary large object,二进制大对象)格式数据,利用它可以在安卓应用开发中存储图片资源. 这里先讲下,怎样把数据从数据库中取出,并显示在imagView ...

  2. Android中ListView的几种常见的优化方法

    Android中的ListView应该算是布局中几种最常用的组件之一了,使用也十分方便,下面将介绍ListView几种比较常见的优化方法: 首先我们给出一个没有任何优化的Listview的Adapte ...

  3. bzoj1412最小割

    太羞耻了,m n写反了(主要是样例n m相等) 建图方法比较高(ji)端(chu),对于可以加栅栏的地方连上1的边,然后求最小割即可 为了让代码优(suo)美(duan),我写了一个check,避免多 ...

  4. BZOJ4293: [PA2015]Siano

    Description 农夫Byteasar买了一片n亩的土地,他要在这上面种草. 他在每一亩土地上都种植了一种独一无二的草,其中,第i亩土地的草每天会长高a[i]厘米. Byteasar一共会进行m ...

  5. dvb标准

    一.概念 DVB, 数字视频广播Digital Video Broadcasting的缩写, 是由DVB项目维护的一系列国际承认的数字电视公开标准.(欧标)二.分类DVB系统传输方式有如下几种: 卫星 ...

  6. 腾讯网2016回响中国:华清远见荣获2016年度知名IT培训品牌

    12月1日,由腾讯网主办的“2016回响中国·腾讯网教育年度盛典”上,揭晓了“2016腾讯网教育年度总评榜”榜单.高端IT就业培训专家——华清远见教育集团凭借自身优质的高薪IT就业服务优势成功入围,荣 ...

  7. java反射学习之二万能EXCEL导出

    一.EXCEL导出的实现过程 假设有一个对象的集合,现在需要将此集合内的所有对象导出到EXCEL中,对象有N个属性:那么我们实现的方式是这样的: 循环这个集合,在循环集合中某个对象的所有属性,将这个对 ...

  8. ubuntu vps 安装 jdk

    Introduction Java is a programming technology originally developed by Sun Microsystems and later acq ...

  9. iOS. PercentEscape是错用的URLEncode,看看AFN和Facebook吧

    别再使用stringByAddingPercentEscapesUsingEncoding 当遇到发送网络请求的参数中有汉字的情况,很多人一股脑地使用stringByAddingPercentEsca ...

  10. indows server 2008 多用户远程桌面连接设置(验证有效

    然后,在运行框中输入 gpedit.msc 之后,点击确定或者直接按键盘上的回车键  计算机配置-->管理模板-->Windows组件---->远程桌面服务--->远程桌面会话 ...