首页 > 编程知识 正文

工作总结开头(onchange事件触发不了)

时间:2023-05-04 02:31:46 阅读:68784 作者:2515

在前端页面开发中,经常需要实时监听文本框输入,例如,如果腾讯微博创建了140个字符的微博,则会动态显示可以在输入框中输入的字符数。

以前使用onchange/onkeyup/onkeypress/onkeydown实现,但这有一些不良的用户体验。

例如,onchange事件仅在键盘或鼠标操作更改对象属性或失去焦点时触发,脚本触发器无效。 另一方面,onkeydown/onkeypress/onkeyup在处理复制、粘贴、拖动和长按(不按住键盘不放)等细节方面不太好。

onpropertychange属性在某些情况下解决了上述问题,而不管是否失去了焦点。 无论是js操作还是键盘鼠标手动操作,只要更改HTML元素的属性就可以立即捕获。 很遗憾。 onpropertychange专用于IE。 其他浏览器则假设希望实现这种实时监听的需求。 使用HTML5标准事件oninput。 但是,IE9下的浏览器不支持oninput事件。

因此,必须同时集成oninput和onpropertychange,以实现文本区域的实时监听功能。 举个例子如下。

例1、对支持oninput的浏览器用oninput。其它浏览器(IE6/7/8)使用onpropertychange:

vartestinput=document.createelement (' input ); if(oninput ) intestinput ) object.addeventlistener )、fn、false ); } else { object.onpropertychange=fn; } 例2、对全部ie使用onpropertychange,其它浏览器用oninput:

var ie=! window.ActiveXObject; if(ie ) { object.onpropertychange=fn; } else { object.addevent listener (' input ',fn,false ); } 汇总onchange onpropertychange 和oninput事件的差别:

1、onchange事件与onpropertychange事件的差别:

onchange事件在内容发生更改、两次内容可能相同并且失去焦点时触发。 onpropertychange事件实时发生。 也就是说,每次添加或删除字符时都会发生。 js的更改也会触发事件。 但是,该事件IE是专有的。

2、oninput事件与onpropertychange事件的差别:

oninput事件是大多数非IE浏览器支持的事件。 value更改时触发,每次实时(添加或删除字符时)触发,但在js中更改value时。 没有触发器; 任何属性更改都会触发onpropertychange事件,但只有在value更改时才会触发oninput。 oninput由addEventListener () )注册。 onpropertychange的注册方法与常规事件相同。 (这里都是指通过js动态绑定事件,实现内容和动作的分离。)

3、oninput与onpropertychange失效的情况:

(1) oninput事件: a ) .在脚本中变更value时。 没有触发器。 b ) .如果您在浏览器中主动从下拉列表中选择,则不会触发。

)2) onpropertychange事件: input设置为disable=true后。 onpropertychange不会触发。

引用以下译文:

HTML5对用于检测用户输入状态的oninput事件进行了标准化。 当然,也可以使用onkeydown或onkeyup作为替换。 这些事件的设计本意也不是这样,请参考详细内容。

所有现代浏览器都支持oninput,包括IE9。

如果旧浏览器不支持此事件,则使用keydown作为优雅的降级。

不幸的是,检测浏览器对此oninput事件的支持不是easy。

假设浏览器支持oninput。 那么,下一个js代码的返回值为true,否则为false。

on input ' in document.createelement (input ) )此代码在大多数浏览器中正常运行,Firefox (参见错误#414853 )除外否则,不需要检查其他浏览器的属性。 只需绑定input和keydown事件。 触发oninput事件后,删除onkeydown即可。 显示比率如下。

some element.on input=function ({ El.onkeydown=null; //Your code goes here}; some element.onkeydown=function (/yourcodegoeshere ) keydown事件在触发oninput事件之前只触发一次。 然后触发oninput。 虽然不完美。 但总比写很多oninput特性校验码好吧。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。