2013-07-26 23 views
0

我有一個HTML頁面具有的onkeydown屬性,像這樣一種形式的文字輸入工作正常鍵正在被擊倒。該javascript文件是的onkeydown不是表單輸入

function lookup_user (lname) { 

var xmlhttp; 

if (lname=='') { 
    document.getElementById('lname').innerHTML = ''; 
    return; 
} 

if (window.XMLHttpRequest) { 
    xmlhttp = new XMLHttpRequest(); 
} 
else { 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
} 



// generally preferred to place onreadystatechange before open so that it detects readyState 0-4 instead of 1-4 
xmlhttp.onreadystatechange = function() { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
     document.getElementById("test").innerHTML = xmlhttp.responseText; 

    } 
} 

xmlhttp.open('POST', 'lookup_user.php', true); 
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
xmlhttp.send('lname='+lname); 



} 

這工作得很好,除了它沒有檢測到第一個keydown的事實。

例如,如果在輸入表單中輸入'D',它不會搜索用戶。當我輸入第二個字符時,它會搜索第二個字符之前的字符,而不包括第二個字符。如果我想查找「Daisy」,並在輸入框中輸入「Daisy」,它將搜索「Dais」。只有當我倒下另一把鑰匙時,它纔會查找「雛菊」。

這是爲什麼?

回答

0

onkeydown事件工作正常。

當按下某個鍵時,將按以下順序觸發事件;​​,keypress,keyup

onkeydown事件在按鍵之後但在將字符放入DOM之前觸發。

由於在觸發事件時字符還沒有放入DOM,因此您的表單文本輸入將不會包含該字符。

例如:onkeydown事件可用於限制字符輸入到表單中。

另一方面:onkeyup事件在用戶釋放密鑰之後並在DOM被修改之後觸發。

也許onkeyup事件更適合您的應用程序。