2012-01-06 9 views
0

の実装:は、私はこのコードを英数字のテキストボックスを実装しようとしている英数字のテキストボックスに

textBoxNewPassword.addKeyPressHandler(new KeyPressHandler() { 
     @Override 
     public void onKeyPress(KeyPressEvent event) { 
      char keyCode = event.getCharCode(); 
      TextBox sender = (TextBox) event.getSource(); 

      if (!Character.isLetterOrDigit(keyCode) 
        || !(keyCode == KeyCodes.KEY_TAB) 
        || !(keyCode == KeyCodes.KEY_BACKSPACE) 
        || !(keyCode == KeyCodes.KEY_LEFT) 
        || !(keyCode == KeyCodes.KEY_RIGHT) 
       ) 
       sender.cancelKey(); 
     } 
    }); 

それは、ユーザが入力したものを消去するために必要とされるが、バックスペースやタブの文句を言わない作業を、動作し、別のフォームフィールドにジャンプします。

このコードで何が不足しているか任意のアイデア?

答えて

1
tb.addKeyPressHandler(new KeyPressHandler() { 
    @Override 
    public void onKeyPress(KeyPressEvent event) { 
    TextBox sender = (TextBox) event.getSource(); 

    int keyCode = event.getNativeEvent().getKeyCode(); 

    if (!(Character.isLetterOrDigit(event.getCharCode())) 
     && !(keyCode == KeyCodes.KEY_TAB) 
     && !(keyCode == KeyCodes.KEY_BACKSPACE) 
     && !(keyCode == KeyCodes.KEY_LEFT) 
     && !(keyCode == KeyCodes.KEY_RIGHT)) { 
     sender.cancelKey(); 
    } 
    } 
}); 

これは動作するようです。

+0

おかげで、私はgetNativeEvent – xybrek

0

私はこの問題は、あなたの条件にあると思います。このようにそれについて考えてみよう:ユーザーがタブに当たった場合、それは文字や数字ではありませんので、キーをキャンセルします。あなたはそれが(一度に)すべてのキーではないではない場合、それはあなたが希望のキーのいずれかでない場合のみ、キャンセルしたいと思います。代わりに&&に変更すると動作します。

if (!Character.isLetterOrDigit(keyCode) 
     && !(keyCode == KeyCodes.KEY_TAB) 
     && !(keyCode == KeyCodes.KEY_BACKSPACE) 
     && !(keyCode == KeyCodes.KEY_LEFT) 
     && !(keyCode == KeyCodes.KEY_RIGHT) 
    ) 
     sender.cancelKey(); 

それは文字または数字ではない場合、それはタブではなく、それはバックスペース、およびない左ではなく右でない場合、キャンセルした場合。

+0

あなたがデバッグする場合、あなたはそれをキャンセルする原因となっている部分を伝えることができますか? – jprofitt

+0

あなたのコードを試しましたが、それでも動作しません。 – xybrek

+0

このコードをどのようにデバッグできるかわかりません。私はちょうど私はこの1つをチェックしますGWT.log – xybrek

0

DTingは正しい軌道に乗っているが、あなたは、あなたがKeyPressEventで正しいキーコード(ブラウザ依存)を取得、あなたはKeyDownイベントハンドラと組み合わせて使用​​する必要があることを確認することはできません。特に、バックスペースや削除のようなものは、別々に扱われます。

出典:http://code.google.com/p/google-web-toolkit/issues/detail?id=4212http://www.quirksmode.org/js/keys.html

+0

を使用している必要があります予期しない値を返す何を参照を使用します – xybrek