我正在尝试在 Firefox 中的文本框上模拟 JavaScript 中的键输入。文本框有一个onfocus=" this.value='' "
属性。模拟+我的代码可以在
工作代码:
var divy = document.getElementById("eventListener");
divy.focus();
var inputText = '';
for(var i = 0; i < ('asd').length; i++)
{
var event = document.createEvent('KeyboardEvent');
event.initKeyEvent ('keydown', true, true, null, false, false, false, false, 0, 0)
divy.dispatchEvent(event);
inputText += ('asd').charAt(i);
var event = document.createEvent('KeyboardEvent');
event.initKeyEvent ('keypress', true, true, null, false, false, false, false, 0, ('asd').charCodeAt(i))
divy.dispatchEvent(event);
divy.value = inputText;
var event = document.createEvent('KeyboardEvent');
event.initKeyEvent ('keyup', true, true, null, false, false, false, false, 0, 0)
divy.dispatchEvent(event);
}
divy.blur();
我的问题是,如何正确模拟输入(没有 jquery!),以便第二个文本框没有空值。而且由于焦点事件只被抛出一次,为什么每次都会删除值。
更新:
正如我认为的那样 divy.focus(); 方法可能需要一些时间来执行属性中的 onfocus 事件,我设置了一个超时来发送关键事件,使用:
windows.setTimeout("fireKeys2()", 5000);
但这似乎也不起作用。测试位于这里 http://jsfiddle.net/hPBNA/23/
更新 2:
我自己发现了问题,似乎 element.value 已设置为 '' 这样 (element.value = '') element.setAttribute('value', someText) 无法更改它。访问 element.value 属性反而给了我正确的结果。
在 Firefox 22 中测试。不知道它是否可以在其他版本上重现。