id为'typehere'的输入类型。在classhere上设置了一个keydown事件。简单的问题是,e.srcElement.value似乎有一个键后面的值。即如果值应为's',则其安慰'记录为空白''。如果我键入'ss',则显示的值为's'。我似乎无法想出这个。
console.log(e),显示e.srcElement.value的正确值(在控制台中),但console.log(e.srcElement.value)显示错误的值。为什么呢?
<script type="text/javascript">
var xmlHttp = createXmlHttpRequestObject();
selectOption = document.getElementById('choose_colony') ;
document.body.onload = function () {
typehere = document.getElementById('typehere') ;
addAnEvent(typehere,"keydown",handleKeyDownevent,false ) ;
}
function handleKeyDownevent (e) {
e = e || window.event ;
if (xmlHttp) {
try {
//xmlHttp.open('GET' , 'async.txt', true ) ;
console.log(e.srcElement.value ) ;
var target= e.target || e.srcElement ;
var typed = target.value ;
if (typed != ""){
console.log('sennding request') ;
//ajax request
}
else {
console.log(e.srcElement.value + "is blank") ;
}
}
catch(e) {
console.log('could not connect to server') ;
}
}
}
</script>
脚本标记位于标记btw
之前由于
答案 0 :(得分:3)
(对于可输入字符,您通常需要keypress
而不是keydown
作为keypress
重复。)
keydown
在值更改之前被触发(keypress
也是如此),尤其是您可以取消按键,因此如果您想在更改后处理该值,您可能希望使用setTimeout(func, 0)
推迟通话。事件链解除后,您的电话将被处理。 (通常在5-10毫秒内。)
所以在你的代码中,这可能是这样的:
addAnEvent(typehere,"keydown",function(e) { // or "keypress"
e = e || window.event;
setTimeout(function() {
handleKeyDownevent(e);
}, 0);
},false ) ;
答案 1 :(得分:0)
使用keyup事件代替keydown。
答案 2 :(得分:0)
简单的答案在于,当您尝试确定事件中变量的值时,它由事件处理程序处理,因此最好只记录事件本身。因此,您可以尝试修改代码以适应这种情况,看看是否有帮助。此外,我不同意以上关于需要设置/包含超时(功能)的答案,除非您试图取消任何击键等。澄清:
<script type="text/javascript">
var xmlHttp = createXmlHttpRequestObject();
selectOption = document.getElementById('choose_colony') ;
document.body.onload = function () {
typehere = document.getElementById('typehere');
addAnEvent(typehere, "keydown", function(e) {
e = e || window.event;
handleKeyDownevent(e);}, false);
}
function handleKeyDownevent (e) {
e = e || window.event ;
if (xmlHttp) {
try {
//xmlHttp.open('GET' , 'async.txt', true ) ;
console.log(e.srcElement.value ) ;
var target= e.target || e.srcElement ;
var typed = target.value ;
if (typed != ""){
console.log('sennding request') ;
//ajax request
}
else {
console.log(e.srcElement.value + "is blank") ;
}
}
catch(e) {
console.log('could not connect to server') ;
}
}
return true;
}
</script>
我希望能帮到你。底部的return true
允许浏览器的默认响应。