2013-07-13 72 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.不知道它是否可在其他版本上重現。

約翰