2017-03-19 10 views
-1

私は、この入力のための機能を追加し、入力に英語だけの種類を必要とする:入力に英語を入力するだけですか?

function englishType() { 
    $('input[lang^=en]').keypress(function(event){ 
     var ew = event.which; 
     if(ew == 32) 
      return true; 
     if(48 <= ew && ew <= 57) 
      return true; 
     if(65 <= ew && ew <= 90) 
      return true; 
     if(97 <= ew && ew <= 122) 
      return true; 
     alert("error"); 
     return false; 
    }); 
} 

しかし、ユーザーが تست(他の言語で任意の単語)をコピーし、この入力に貼り付けると、このコードは動作しないことができます!

.keypressはCopy and Pasteでは機能しません。

どうすれば修正できますか?

+5

あなたが受け入れる文字については、あまり詳しく述べないでください。私は、あなたが直面している問題のデジャヴァーを得ています。それがあなたが必要とするすべての文字だと思うなら、あなたは残念なことにかなり純粋です。 –

+0

こんにちは@NiettheDarkAbsol、いいえ!私は入力するだけで英語を入力する必要があります。ユーザーは、入力に他のキーワードをコピーして貼り付けることができます。このコードは動作しません。どうすればいい? – mySun

+0

この入力フィールドはフォームに存在しますか?もしそうなら、jQueryのバリデーションを使ってそのフォームを検証することができます。@ mySun –

答えて

1

まず、keypressではなく、イベントを使用する必要があります。

第2に、英語以外の文字を貼り付けるのを防ぐには、event.target.valueのすべてを処理して、不要な文字を除外するか、場合によってはエラーを発生させる必要があります。あなたは正規表現を使用することができます。範囲[a-zA-Z ]は正常に動作するはずです。あなたは許可したい他の文字でこれを補うことができます。他のコメントのような

event.target.value.match(/[^a-zA-Z ]/) // Array if value outside the range 

第三には、あなたが例えばRésuméのように、英語の単語の多くを制限している、と言うので、これは必ずしも良いアイデアではありません。しかし、ユースケースは異なる場合があります。

+0

'backspace'が' keyup'イベントで実行されているため、 'keyup'イベントがうまくいかない – mySun

+0

**すべてのキーが' keyup'イベントを発生します**ユーザーがテキストを貼り付ける場合、 'event.keyCode 'はcharCodeがControlキーか17のどちらかになるので助けにはならないでしょうし、基本的にはCtrl + Aやその他の組み合わせを使用することもできません。 – gargsms

関連する問題