2012-06-05 56 views
0

我写了一个样本HTML页面调用函数的onkeyup只有一次

<html> 
<head> 
<script> 
function validate() { 
alert(document.getElementById('newpass').value); 
} 
</script> 
</head> 

<body> 
<input type="text" id="newpass" onkeyup="validate();" /> 
</body> 
</html> 

但是像当我按退格键的情况下,该函数获取调用多次。 如何让它只执行一次?

所有我想要做的是让一个事件一个输入框的当前值,目前onkeypress事件是不是给当前的一个,但前一个。 onkeyup给出当前但执行很多次。

+0

它,它周围的其他方法...'keypup'闪光一次,而'keypress'触发多次。 – gdoron

+1

也许'onchange'在这种情况下可能会更好? – jeremyharris

回答

1

如果你想要的功能,当用户输入完成后,再使用onchange,而不是重点了

注意得到的值: onkeyup工作,因为它应该。如果你释放密钥,它会被调用一次。如果你按住退格键然后释放,那么它只会被调用一次。

onkeypress,因为该值被存储前被踢事件不会得到值。

另一种选择是退格忽略

function validate(event) { 
    var keynum; 
    if (window.event) { 
     keynum = window.event.keyCode; 
    } else if (event.which) { 
     keynum = event.which; 
    } 

    if (keynum == 8) { // backspace 
     return; 
    } 
    alert(document.getElementById('newpass').value); 
} 

或者你可以检查前一个关键,如果是相同的,然后忽略它

var previousKey; 
function validate(event) { 
    var keynum; 
    if (window.event) { 
     keynum = window.event.keyCode; 
    } else if (event.which) { 
     keynum = event.which; 
    } 

    if (keynum == previousKey) { // backspace 
     return; 
    } 

    previousKey = keynum; 

    alert(document.getElementById('newpass').value); 
} 

或者其退格再次忽略

+0

+1试图帮助 – periback2

4

这听起来像你希望得到您的输入字段的当前值有人打字,但想如果他们使用退格键来忽略:

<html> 
<head> 
<script type="text/javascript"> 
function validate(that,e){ 
    var eventObject = window.event? event : e; 
    var keyCode = eventObject.charCode? eventObject.charCode : eventObject.keyCode; 
    if (keyCode != 8) { 
    alert(that.value); 
    } 
} 
</script> 
</head> 

<body> 
<input type="text" id="newpass" onkeyup="validate(this,event);" /> 
</body> 
</html> 
+0

我说,在我的答案..想知道为什么创建一个新的答案没有什么补充。 –

+0

,因为我的帖子有一个答案页面打开,并且与您同时发布,但速度较慢,因为我正在验证我的代码... p.s. re:“什么都不加”你的代码不是跨浏览器兼容的,比较我们的代码。 –

+0

@ D3mon-1stVFW还有就是你的答案,这是一个足够小的时间间隔的假设,这个答案可能是在你发布你的时间被写入的过程之间有3分钟的差距。 – apsillers