深入理解DOM事件类型系列第五篇——文本事件
前面的话
如果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事件类型系列第五篇——文本事件的更多相关文章
- 深入理解DOM事件类型系列第三篇——变动事件
× 目录 [1]删除节点 [2]插入节点 [3]特性节点[4]文本节点 前面的话 变动(mutation)事件能在DOM中的某一部分发生变化时给出提示,这类事件非常有用,但都只能使用DOM2级事件处理 ...
- 深入理解DOM事件类型系列第四篇——剪贴板事件
× 目录 [1]定义 [2]对象方法 [3]应用 前面的话 剪贴板操作可能看起来不起眼,但是却十分有用,可以增强用户体验,方便用户操作.本文将详细介绍剪贴板事件 定义 剪贴板操作包括剪切(cut).复 ...
- 深入理解DOM事件类型系列第六篇——加载事件
前面的话 提到加载事件,可能想到了window.onload,但实际上,加载事件是一大类事件,本文将详细介绍加载事件 load load事件是最常用的一个事件,当页面完全加载后(包括所有图像.java ...
- 深入理解ajax系列第五篇——进度事件
前面的话 一般地,使用readystatechange事件探测HTTP请求的完成.XHR2规范草案定义了进度事件Progress Events规范,XMLHttpRequest对象在请求的不同阶段触发 ...
- 深入理解脚本化CSS系列第五篇——动态样式
前面的话 很多时候,DOM操作比较简单明了,因此用javascript生成那些通常原本是HTML代码生成的内容并不麻烦.但由于浏览器充斥着隐藏的陷阱和不兼容问题,处理DOM中的某些部分时要复杂一些,比 ...
- C#微信公众号开发系列教程五(接收事件推送与消息排重)
微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) C#微信公众号开发系列教程三(消息体签名及加解密) C ...
- 前端工程师技能之photoshop巧用系列第五篇——雪碧图
× 目录 [1]定义 [2]应用场景 [3]合并[4]实现[5]维护 前面的话 前面已经介绍过,描述性图片最终要合并为雪碧图.本文是photoshop巧用系列第五篇——雪碧图 定义 css雪碧图(sp ...
- 深入理解DOM事件类型系列第二篇——键盘事件
× 目录 [1]类型 [2]顺序 [3]按键信息[4]应用 前面的话 鼠标和键盘是电脑端主要的输入设备,上篇介绍了鼠标事件,本文将详细介绍键盘事件 类型 键盘事件用来描述键盘行为,主要有keydown ...
- 深入理解DOM事件类型系列第一篇——鼠标事件
× 目录 [1]类型 [2]顺序 [3]坐标位置[4]修改键[5]相关元素[6]鼠标按键[7]滚轮事件[8]移动设备 前面的话 鼠标事件是web开发中最常用的一类事件,毕竟鼠标是最主要的定位设备.本文 ...
随机推荐
- asp.net 项目Net4.0 在IE10、 IE 11 下出现 “__doPostBack”未定义 的解决办法
我的项目中,服务器端是Windows Server2008 64位,.net版本是4.0,也遇到了树形结构控件.DropDownList控件等不能调用服务器端代码.最后发现js报错. 错误信息:“__ ...
- linux工具
sudo yum install yum-utils
- python,django安装
环境:win7 64位 软件:python3.4.3,jdango1.8,PyDev,pymysql0.7 一:安装python 1.安装好python好后,配置环境变量,可以参考其它的博客,本博客只 ...
- arm,iptables: No chain/target/match by that name.
最近由于项目需要,需要打开防火墙功能. 公司有 arm linux 3.0x86 linux 3.2x86 linux 2.4 的三个嵌入式.都需要打开防火墙功能. 执行“whereis iptabl ...
- 关于The C compiler "arm-none-eabi-gcc" is not able to compile a simple test program. 的错误自省...
在 GCC ARM Embedded https://launchpad.net/gcc-arm-embedded/ 上面下载了个arm-none-eabi-gcc 用cmake 编译时 #指定C交叉 ...
- jQueryUI Draggable 和 Droppable 配合使用时遇到的两个坑
jQueryUI 的 拖拽插件极大的方便了开发者对拖拽功能的实现,但是官方教程给的太笼统,在具体实现的时候很多地方不明确,这里说一下我遇到的两个 "小坑": 1:Draggable ...
- Java反编译代码对齐
使用反编译的代码作为jar包源码进行调试时,经常会遇到的情况是反编译后的源码之在注释里包含行号,但是与代码所在行经常对应不上.这个时候,就有必要对代码进行对齐了. public class Reo ...
- 不能链接云服务器mysql
如果报host'' 不允许连接MySQL服务器 1130 错误的话如果你的3306端口打开了,也把user 里的host改为% 还是不行的话,请记得更改 站点域名设置,和你服务器相同,端口一致.
- Linux tar文件打包
tar格式,会打包成一个文件,可以对多个目录,或者多个文件进行打包 tar命令只是打包,不会压缩,打包前后大小是一样的 tar命令 -c //打包 -x //解压 -f //指定文件 ...
- 非常全面的SQL Server巡检脚本来自sqlskills团队的Glenn Berry 大牛
非常全面的SQL Server巡检脚本来自sqlskills团队的Glenn Berry 大牛 Glenn Berry 大牛会对这个脚本持续更新 -- SQL Server 2012 Diagnost ...