onkeydown无法正常处理表单输入

时间:2013-07-26 23:46:53

标签: behavior onkeydown

我有一个带有表单文本输入的html页面,它具有onkeydown属性,如下所示:

<DOCTYPE !html>
<html>

<head>
<title>Lookup User</title>
</head>
<body>
<form method="POST">
<strong>Last Name: </strong><input type="text" id="lname" onkeydown="lookup_user(this.value)" />

</form>
<span id="test"></span>
<script type="text/javascript" src="lookup_user.js"></script>
</body>
</html>

该页面向服务器发出异步请求,以便在键被关闭时搜索用户。 javascript文件是

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之外,这几乎没有问题。

例如,如果在输入表单中输入&#39; D&#39;,则它不会搜索用户。当我输入第二个字符时,它会搜索第二个字符前的字符,而不包括第二个字符。如果我想查找&#34; Daisy&#34;,并输入&#34; Daisy&#34;进入输入框,它会搜索&#34; Dais&#34;。只有当我按下另一个键时才会查找&#34; Daisy&#34;。

为什么会这样?

1 个答案:

答案 0 :(得分:0)

onkeydown事件正常运作。

按下某个键时,将按以下顺序触发事件; keydownkeypresskeyup

按键后但在将字符放入DOM之前触发onkeydown事件。

由于在触发事件时角色尚未放入DOM中,因此表单文本输入中不会包含该字符。

例如:onkeydown事件可用于限制字符输入到表单中。

另一方面:在用户释放密钥之后以及修改DOM之后,onkeyup事件被触发。

也许onkeyup事件更适合您的应用程序。