2011-12-09 3 views
0

javascript의 onblur 이벤트는 요소가 포커스를 잃을 때 트리거됩니다.onkeypress + onblur in javascript

onkeydown 키를 눌렀을 때 포커스가있는 요소에서 발생하며 키를 놓을 때까지 주기적으로 발생합니다.

날짜 필드의 유효성을 검사하려면 onkeydown 이벤트가 9와 13에 해당됩니다 (입력 및 탭 키). 하지만 Enter 키를 누르면 중복 된 경고 메시지가 나타납니다. 물론이 경우에는 onblur 및 onkeydown 이벤트라는 두 가지 테스트가 있습니다.

<html:text  onblur="return onDateChange(this);" 
     onkeydown="return onDateKeyPress(this);"/> 

onDateChange() 메소드는 :

은 HTML 코드

function onDateChange(obj){ 
//validateField is an externatl javascript method which trigger an alert message if we have errors in date 
     if(validateField(obj,'date',dateFormat)){ 
     //do instructions 
     } 
} 

최종적 onDateKeyPress() 방법은 다음과 같다 : 따라서,

function onDateKeyPress(obj){ 
    if(window.event.keyCode == 9) 
    { 
     if(validateField(obj,'date',dateFormat)) 
     { 
      //do instructions 
     } 
    } 
    if(window.event.keyCode == 13) 
    { 
     if(validateField(obj,'date',dateFormat)) 
     { 
     //do instructions 
     } 
    } 
} 

문제가있는 하나의 표시 경고 메시지입니다. 제안 사항이 있으십니까?

+2

시도한 코드를 함께 적어주십시오. –

+1

@ dku.rajkumar 이미 코드가 포함되어 있습니다 – kaissun

+1

답변을 추가했습니다. 그것을 확인하십시오. –

답변

2

당신이 JQuery와

당신이 당신의 텍스트 요소에 onclick 또는 onkeydown을 포함 할 필요가없는
$('#text_field_id').bind({ 
    blur: function(event) { 
    if(validateField(this,'date',dateFormat)){ 
     //do instructions 
     } 
    }, 
    keydown: function(event) { 
    if(event.keyCode == 9) 
    { 
     if(validateField(this,'date',dateFormat)) 
     { 
      //do instructions 
     } 
    } 
    if(event.keyCode == 13) 
    { 
     if(validateField(this,'date',dateFormat)) 
     { 
      //do instructions 
     } 
    } 

    } 
}); 

으로 쉽게 할 수 있습니다. 하나의 작은 질문을 모든 경우 또는 다른 지침에서 동일한 지침을 실행하고 싶습니까? 동일한 명령어를 실행하려면 많은 코드를 제거 할 수 있습니다.

+0

물론 많은 코드를 삭제할 수 있습니다. 그러나, 나는 각 경우마다 다른 지시를 실행해야한다. – kaissun

1

상기 용액에서; keydownFired는 blur가 발생하고 코드의 if 분기가 아무 작업도 수행하지 않는 경우 true입니다. 그래서 아무 일도 일어나지 않습니다.

경고가 표시되는 것 이외의 다른 방법으로 흐림 효과가있는 경우; 그 다음에 다음이 작동해야합니다.

input.addEventListener('blur', function (e) { 

doSomethingThatshldHappenAlwaysOnBLur(); 

    if (keydownFired) { 

     keydownFired = false 

    } else { 
     showAlert();  
    } 
}) 
+3

위의 해결책을 삭제했습니다. 따라서 우리는 다른 사용자들에게도 완벽한 솔루션을 제공하지 못합니다. – kaissun