2011-12-09 68 views
0

當元素失去焦點時,會觸發javascript中的onblur事件。onkeypress + onblur在javascript中

onkeydown在鍵被按下時發生焦點的元素上發生,並且定期發生直到釋放鍵。

如果我想驗證日期字段,onkeydown事件涉及9和13(輸入和製表鍵)。 但是當我按下回車鍵,然後我收到重複的警報消息。 當然在這種情況下,我們有兩個測試,onblur和onkeydown事件。

這是HTML代碼:

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

的onDateChange()的方法是:

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

$('#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 
     } 
    } 

    } 
}); 

你不需要在您的文本元素onclickonkeydown容易做到這一點。一個小問題,你想在所有情況下執行相同的指示或不同的指示?如果你想執行相同的指令,很多代碼可以被刪除。

+0

當然,可以刪除很多代碼。但是,我必須在每種情況下執行不同的指示。 – kaissun

1

在上面的解決方案中;當模糊被激發時,keydownFired是true,並且代碼的if分支什麼都不做。所以沒有任何反應

如果模糊除了顯示警報之外還有其他事情要做;那麼以後應該工作。

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

doSomethingThatshldHappenAlwaysOnBLur(); 

    if (keydownFired) { 

     keydownFired = false 

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

上面的解決方案已被刪除。所以我們沒有完整的解決方案,即使對於其他用戶也是如此。 – kaissun