监听输入框值变化的最佳方案 oninput 和 onpropertychange (实时监控文本框改变的最佳方案)
2024-08-31 11:15:30
公司有个文本框,当输入文字/粘贴/复制 或者是键盘猛按的时候,都希望这个文本框能统计出 输入了多少字
这种用 onchange onkeyup onkepress 都不怎么好使
最后在快要无语的情况下,使用了 下面的组合方式
onkeyup="commMaxLength(this,30,'leftWordTitle')" oninput="commMaxLength(this,30,'leftWordTitle')" onpropertychange="commMaxLength(this,30,'leftWordTitle')"
有前辈说用jquery更风骚,于是下面发一个jquery的 (只写了 oninput 和 onpropertychange )
$('textarea').bind('input propertychange', function() {
$('.msg').html($(this).val().length + ' characters');
});
如果不用jquery库,还可以这样
<head>
<script type="text/javascript">
// Firefox, Google Chrome, Opera, Safari, Internet Explorer from version 9
function OnInput (event) {
alert ("The new content: " + event.target.value);
}
// Internet Explorer
function OnPropChanged (event) {
if (event.propertyName.toLowerCase () == "value") {
alert ("The new content: " + event.srcElement.value);
}
}
</script>
</head>
<body>
Please modify the contents of the text field.
<input type="text" oninput="OnInput (event)" onpropertychange="OnPropChanged (event)" value="Text field" />
</body>
最后是注释
1、onchange事件与onpropertychange事件的区别:
onchange事件在内容改变(两次内容有可能还是相等的)且失去焦点时触发;onpropertychange事件却是实时触发,即每增加或删除一个字符就会触发,通过js改变也会触发该事件,但是该事件IE专有。
2、oninput事件与onpropertychange事件的区别:
oninput事件是IE之外的大多数浏览器支持的事件,在value改变时触发,实时的,即每增加或删除一个字符就会触发,然而通过js改变value时,却不会触发;onpropertychange事件是任何属性改变都会触发的,而oninput却只在value改变时触发,oninput要通过addEventListener()来注册,onpropertychange注册方式跟一般事件一样。(此处都是指在js中动态绑定事件,以实现内容与行为分离)
3、oninput与onpropertychange失效的情况:
(1)oninput事件:a). 当脚本中改变value时,不会触发;b). 从浏览器的自动下拉提示中选取时,不会触发。
(2)onpropertychange事件:当input设置为disable=true后,onpropertychange不会触发。
知识链接 :http://www.zlovezl.cn/articles/12/
最牛叉的解决方法(真的是实时的,可以着重看看这个) http://polaris.blog.51cto.com/1146394/265667/
最新文章
- .NET RESTful Web Services入门
- ORACLE RETURNING 用法总结
- 让IE6/IE7/IE8浏览器支持CSS3属性
- LoadRunner:视频教程、课件
- 与你相遇好幸运,服务器node环境安装
- selenium-webdriver(python) (十四) -- webdriver原理
- AspxSpy2014 Final
- 矩阵的QR分解
- idea上实现github代码同步
- JDBC中的事务-Transaction
- Waring:This LinearLayout layout or its FrameLayout parent is useless; transfer the background attribute to the other view
- Android开发UI之手动显示和隐藏软键盘
- 分别取商和余数:divmod(a, b)
- 【贪心】【POJ3154】墓地雕塑(Graveyard, NEERC 2006, LA 3708)需要稍稍加工的(先贪心,再确保能这样贪(可行性&;&;如果可行必定最优&;&;非证明最优性)的题)(K)
- UVa 1583 - Digit Generator
- 恢复SQLSERVER被误删除的数据(转)
- NYOJ116 士兵杀敌(二)
- [POI 2004]SZP
- intellij idea 2017和Jprofiler 10的集成 报错问题
- synchronize 关键字原理
热门文章
- css超出一行添加省略号属性:text-overflow和white-space
- Python 连接数据库 mysql
- spring IOC 模拟实现
- Android开发(三十)——ScrollView中ListView的高度自动适应
- Sqlserver 2008 error 40出现连接错误的解决方法
- 解决maven项目 maven install失败 错误 Failed to execute goal org.apache.maven.plugins
- STM32f103的数电采集电路的TIMER定时器的使用与时序控制的程序
- C++中嵌入python程序——命令行模式
- Selenium (2) —— Selenium WebDriver + Grid2(101 Tutorial)
- Java编程的逻辑 (50) - 剖析EnumMap