2011-06-28 15 views
1

私はcapslockをオンにするかどうかを確認するためのパスワードフィールドを作成したいと思います。ユーザーが小文字で値を入力し、別のフィールドを試行すると、パスワード値を検証します。したがって、押されたすべてのキーに対してonkeypressを使用し、最後にonblurを使用します。javascriptイベント処理

しかし、私が直面している問題は、onkeypressがonblurにチェックされる度に実行されることです。

<input type="password" size=50 id='r5PswFld' name="name" value="" onkeypress="checkCapsLock(event)" onblur=chkPsw(this.id) > 

誰でもこの達成方法を教えてください。

私は私私のjQueryのような無他の技術を用いてこれだけではJavaScript/HTML/CSSを行うことができていた場合

より良い事前のおかげで... ...

+1

これは唯一の検証チェックポイントではないことを願っています...クライアントサイドコードでのみ検証することは災害のレシピです。 – petsoukos

+0

良い点。サーバー側の検証を実行しない場合は、問題を尋ねるだけです。 – Neil

答えて

1

このイベントは、解雇されました。

document.getElementById("r5PswFld").onblur = function(chkPsw(this.id)'){}; 

あなた自身が離れて集中す​​るアクションを実行する必要が判明した場合は、それを取り外し:あなたはcheckCapsLockそれを発射

document.getElementById("r5PswFld").onblur = function(){}; 

次の時間

はあなたcheckCapsLock(event)を開始する時のonblurを添付しますあなたがする必要がある場合は反応するでしょう。また、onblue属性をコードから完全に削除することもできます。

つまり、onblurの検証には注意してください。もし目障りであれば(alertのように)、すぐにユーザーにとって非常に不満を感じる可能性があります。以下のコメントに安息で

EDIT

、私は他のぼかしバインディングの問題を修正しようと思いました。私は好みのためにjQueryを使用します。いいえ、blurイベントは、同じように実行されません

$("#r5PswFld").blur(MyBlurFunc); 

$("#r5PswFld").unbind('blur', MyBlurFunc); 
+0

私は99%のケースでうまくいきましたが、何らかのjavascriptライブラリがあなたのぼかしメソッドをオーバーライドしてからそれを呼び出すという1%を考えると、私はそれを投票しません。あなただけではなく、ぼかしイベントを使用してすべての方法を傷つけています。 – Neil

+0

@ Neeil:非常に寛大な、neil。あなたはもちろん正しいです。これを修正するために私の答えを編集します。 –

+0

@Neil:そこに行きます。これがあなたの承認を満たすことを願っています;-) –

-1

なぜあなたはそれを変更しないだろうそれが有効になる前にonblurイベントをlowecaseする?

+0

あなたは答えを持っているのですか? –

1

残念ながら、フォーカスがフィールドから残っているときにはいつでもonblurが呼び出されます。つまり、capslockをオンにしたことをユーザーに知らせる何らかのメッセージボックスを開くと、フォーカスが取り除かれてonblurイベントがトリガーされます。

代わりに、メッセージボックスを開く前にtrueに設定するフラグを有効にして、chkPswを入力した場合に無視することができます。

は、言い換えれば、あなたは他のチェックボックスの入力をチェックして、あなたは離れて現在のコントロールからフォーカスをぼかしているので

var flgEventsOff = false; 
function checkCapsLock(event) { 
    if (fieldValueIsUpper) { 
     flgEventsOff = true; 
     alert('Please turn off capslock!'); 
     flgEventsOff = false; 
    } 
} 

function chkPsw(id) { 
    if(!flgEventsOff) { 
     // Validate password 
    } 
} 
0

をバインド解除するには:バインドするに

function MyBlurFunc(){ 
    chkPsw(this.id); 
} 

正しい解決策は、次のようになりますkeyPressイベントが発生した時刻。私は、あなたのイベントハンドラ内にalert()というステートメントがあると仮定します。これはフォーカスを失います。