2011-06-23 6 views
2

こんにちは私のSOメンバー、GWT TextBoxのPASTE(コピーパスタ)イベントの値を取得するにはどうすればよいですか?

私はテキストボックス内の値をコピーして貼り付けるのを防ぎたいのですが、値が特定の条件を満たしていない場合のみです。

たとえば、電話番号に使用されるDigitsOnlyTextBoxを作成しました。

this.sinkEvents(Event.ONPASTE); 

public void onBrowserEvent(Event event) { 
    super.onBrowserEvent(event); 

    // Permet d'empêcher le copier-coller, donc d'entrer des caractères non-numériques 

    if (event.getTypeInt() == Event.ONPASTE) { 
     event.stopPropagation(); 
     event.preventDefault(); 
    } 
} 

をしかし、私はしたいと思います: 私はすでにそれがこれだけCharacter.isDigit文字がボックスに入力することができ、ユーザーがコピー&ペーストすることができない値をその中に、使用して作られましたコピー貼り付けされたStringが「数字のみ」であるかどうかを確認し、そうであれば、イベントが発生するようにします(したがってテキストが追加されます)。

TL; DRは: タイトルを参照してください

はお時間をいただき、ありがとうございます。 よろしくお願いいたします。 the MDCによると

答えて

1

IMO

を貼り付けされているテキストを取得するために何のDOM-唯一の方法は現在ありません、あなたはより良い「ペースト」は「その後、書き換えが起こるとさせたいです(実際には、私はむしろonValueChangeだけを行う)テキストボックスの値は、その値が数値のみでないときに無効なものとしてフラグを立てます(これはIntegerBoxの例です)。

+0

「DOM-ONLYはありません」 別の方法がありますか? しかし、ええ、私はあなたに同意します、あなたの時間のおかげで! – dominicbri7

0

ローカル変数に古い値を保存し、イベントの直後にロジックをエスケープし、値がOKでない場合は古いテキストをそのまま残してください。

@Override 
public void onBrowserEvent(Event event) 
{ 
    super.onBrowserEvent(event); 
    final String oldValue = getValue(); 
    switch (event.getTypeInt()) 
    { 
     case Event.ONPASTE: 
      Scheduler.get().scheduleDeferred(new ScheduledCommand() 
      { 

       @Override 
       public void execute() 
       { 
        if(<not ok>) 
         setValue(oldValue); 
       } 

      }); 
      break; 
    } 
} 
関連する問題