js动态改变文本域触发onchange事件
今天在改造百度ueditor编辑器插入图片功能的时候,发现用键盘修改文本域时能触发事件,但是用js动态去回写值时,IE浏览器可以正常触发,但是FF和其他浏览器均不支持。
于是上网去了很多论坛逛了下,发现都没有合适的解决办法,IE浏览器之所以可以是因为它有他的专利:
input.onpropertychange=function(){}
在火狐和其他浏览器使用如下方法
input.addEventListener("input", function(){
//触发此事件的方法
},false)
来触发onchange事件,用这招在用键盘输入文字改变文本域时可以触发onchange事件,但是动态给文本框赋值怎么也触发不了。纠结了很久,脑子冒出一个很傻的办法,给input再添加一个监听,也就是说给文本框动态赋值后,立即添加onfocus,即input.focus();对文本框聚焦。然后给文本框再注册一个onfocus监听来处理和上面监听一样的方法。代码如下:
input.addEventListener("focus", function(){ //触发此事件的方法,与上面一致 },false);
这样就解决了各个浏览器之间的差异,方法比较傻,但是把问题给解决了,写下来和大家分享下。
大家如果有什么更好的解决办法,欢迎留言交互。谢谢!^^