IE6里这事件不触发,具体代码(html页面源代码)如下:
测试
请注意第一次录入数据,不论什么方式(键盘输入,键盘粘贴,鼠标粘贴)都不会改变,第二次就可以,
这个问题是出现在使用DOM创建的input,并为input赋值,在页面里写的input没有这个问题
window.onload = function(){ var body = window.document.body; var txt = document.createElement("input"); txt.id = "txt"; txt.type = "text"; txt.value = "a"; //只要在这里赋值,第一次value改变事件监听就不会触发 if(/msie/i.test(navigator.userAgent)){ txt.attachEvent("onpropertychange",handle); } else { txt.addEventListener("input",handle,false); }; body.appendChild(txt); } //当状态改变的时候执行的函数 function handle() { //alert('输入的文字为:'+document.getElementById('txt').value); document.getElementById('msg').innerHTML='输入的文字为:'+document.getElementById('txt').value; }
[b]问题补充:[/b]
也不用需要它监听js修改值, 只要我用JS 将value设置好, onproperty事件可以监听页面上用户操作的事件就行,现在连这个都出问题了
[b]问题补充:[/b]
wilow你的解决方法试了么? 我这已经试过了,同样不行。就是第一次监听不到的问题;另外,IE的onpropertychange事件是可以监听js修改的。
[b]问题补充:[/b]
既然只是改值, 为什么不用onchange, 非用onpropertychange?
使用onpropertychange是需要进行联动计算事件监听
比如:
一个表格有三列, 第三列的值从第一二列算出。
那么,当操作人修改其一二列的值时,要时时的计算第三列的值。
而不是失去焦点时触发(onchange)计算。
也想过用组合的事件来元代,但使用onkeyup虽然也可以监听键盘的事件。
但是用鼠标粘贴的情况,onpaste事件只能取到粘贴前input的值。
怎么能取到粘贴后input的值?
如果可以,那么完全可以替代onpropertychange这种方法。谢谢,请帮我想想。。
另外 clipboardData 可取剪贴板数据
用js代码赋值应该是不会触发事件的
既然只是改值, 为什么不用onchange, 非用onpropertychange?
其实你的代码也不是不触发onpropertychange事件, 只不过第一次用户修改不会触发,以后都触发, 用代码修改第一次也是触发的, 比较奇怪
直接写的input 非js创建的,不存在此问题,很有意思,明天继续研究一下
把脚本改为如下即可。
var body = window.document.body; var txt = document.createElement("input"); txt.id = "txt"; txt.type = "text"; // 删除赋值代码 if(/msie/i.test(navigator.userAgent)){ txt.attachEvent("onpropertychange",handle); } else { txt.addEventListener("input",handle,false); }; body.appendChild(txt); // -----增加代码 document.getElementById("txt").value = "a";
不好意思,的确还不行, 没辙了。 用延时赋值才行。
//当状态改变的时候执行的函数 function handle() { //alert('输入的文字为:'+document.getElementById('txt').value); document.getElementById('msg').innerHTML='输入的文字为:'+document.getElementById('txt').value; } function init(){ var body = window.document.body; var txt = document.createElement("input"); txt.id = "txt"; txt.type = "text"; //txt.value = "a"; //只要在这里赋值,第一次value改变事件监听就不会触发 if(/msie/i.test(navigator.userAgent)){ txt.attachEvent("onpropertychange",handle); } else { txt.addEventListener("input",handle,false); }; body.appendChild(txt); // -----增加代码 setTimeout(setValue,1000); } function setValue(){ document.getElementById("txt").value = "a"; }
测试
请注意第一次录入数据,不论什么方式(键盘输入,键盘粘贴,鼠标粘贴)都不会改变,第二次就可以,
这个问题是出现在使用DOM创建的input,并为input赋值,在页面里写的input没有这个问题
window.onload = init;