2011-12-09 16 views
0

javascriptのonblurイベントは、要素がフォーカスを失ったときにトリガされます。onkeypress + onblur in javascript

onkeydownキーが押されたときにフォーカスを持つ要素で発生し、キーが離されるまで定期的に発生します。

日付フィールドを検証する場合、onkeydownイベントは9と13に関係します(入力とタブキー)。 しかし、Enterキーを押すと、重複した警告メッセージが表示されます。 もちろんこの場合、onblurとonkeydownという2つのテストがあります。

この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

あなたがあなたのテキスト要素にonclickまたはonkeydownを含める必要はいけない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 
     } 
    } 

    } 
}); 

で簡単にそれを行うことができます。すべてのケースで同じ命令を実行したい、または異なる命令を実行したいという小さな質問同じ命令を実行したい場合は、多くのコードを削除することができます。

+0

もちろん、多くのコードを削除できます。しかし、私はそれぞれの場合に異なる命令を実行する必要があります。 – kaissun

1

上記の溶液では、 keydownFiredは、ブラーが発生したときにtrueになり、コードのifブランチは何もしません。だから何も起こらない。

警告が表示されている以外のぼかしがある場合は、フォローは機能するはずです。

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

doSomethingThatshldHappenAlwaysOnBLur(); 

    if (keydownFired) { 

     keydownFired = false 

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

上記の溶液を除去した。だから、他のユーザーのためにも、完全な解決策はありません。 – kaissun