2013-07-13 36 views
0

我想在Firefox中的文本框中模拟JavaScript中的keyinput。该文本框具有onfocus=" this.value='' "属性。仿真+我的代码可以在JavaScript onfocus属性和按键事件

找到工作代码:

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的!),因此第二个文本框没有空值。而且由于焦点事​​件只是一次抛出,所以为什么每次都要擦除这个值。

UPDATE:

正如我认为divy.focus();方法可能需要一些时间来执行的属性onfocus事件,我设置了一个超时发送的关键事件,使用:

windows.setTimeout("fireKeys2()", 5000); 

但是,这也似乎并没有工作。测试位于这里 http://jsfiddle.net/hPBNA/23/

更新2:

我想通了自己的问题,就好像如果element.value已被设置为“”这种方式(element.value =“”)元素。 setAttribute('value',someText)无法改变它。访问element.value属性反而给了我正确的结果。

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

回答

0

我自己想出了这个问题,好像element.value被设置为''这样(element.value =''),element.setAttribute('value',someText)不能改变它。访问element.value属性反而给了我正确的结果。

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

约翰