2011-06-23 8 views
2

你好同胞SO成員,如何在GWT文本框中檢索PASTE(複製麪食)事件的值?

我想阻止用戶在我的文本框中複製粘貼值IF和僅當這些值不尊重特定條件。

例如,我創建了一個DigitsOnlyTextBox,它將用於電話號碼。 我已經說得那麼只有Character.isDigit字符可以鍵入到框,用戶不能複製粘貼值到它,使用:

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(); 
    } 
} 

但我想驗證複製粘貼的字符串是否爲「僅限數字」,如果是,則讓事件發生(因此添加了文本)。

TL;博士: 看到標題

謝謝您的時間。 真誠。

回答

1

根據the MDC

目前還沒有唯一的DOM的方式來獲得被粘貼的文本

IMO,你最好讓「粘貼」的發生,然後「重寫「文本框的值去除非數字(實際上,我甚至寧願只使用Value改變),或者只是當它的值不是數字時(這是IntegerBox的作用)將該框標記爲無效。

+0

「no DOM-ONLY way」 這是否意味着還有其他方法? 但是,我同意你的意見,謝謝你的時間! – dominicbri7

0

只需將舊值保存在本地變量中,並在事件發生後立即執行邏輯,如果值不正確,請保留舊文本。

@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; 
    } 
} 
相關問題