0

我正在尝试在 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 中测试。不知道它是否可以在其他版本上重现。

4

1 回答 1

0

我自己发现了问题,似乎如果 element.value 以这种方式设置为 '' (element.value = ''), element.setAttribute('value', someText) 无法更改它。访问 element.value 属性反而给了我正确的结果。

在 Firefox 22 中测试。不知道它是否可以在其他版本上重现。

约翰

于 2013-07-13T15:21:29.037 回答