2012-06-05 3 views
0

내가 샘플 HTML 페이지 한 번만

<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

내가 답변 페이지를 게시하고 동시에 게시하는 중이었기 때문에 코드를 확인 중이기 때문에 속도가 느려졌 기 때문에 ... 다시 : "추가 할 것이 없습니다"귀하의 코드는 브라우저 간 호환이되지 않습니다. 우리의 코드를 비교하십시오. –

+0

@ D3mon-1stVFW 답변 사이에 3 분의 간격이 있습니다.이 답변은 귀하의 답변을 게시했을 당시에 작성된 것으로 추정 할 수있는 충분한 시간입니다. – apsillers