如何在GWT TextBox中检索PASTE(copy-pasta)事件的值?

时间:2011-06-23 19:19:18

标签: java events gwt textbox copy-paste

你好SO成员,

我想阻止用户在我的TextBox 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();
    }
}

但是我想验证复制粘贴的String是否只是“仅数字”,如果是,请让事件发生(因此添加了文本)。

tl;博士: 见标题

感谢您的时间。 此致。

2 个答案:

答案 0 :(得分:1)

根据the MDC

  

目前没有以DOM方式获取正在粘贴的文本

IMO,你最好让“粘贴”发生,然后“重写”文本框的值以去除非数字(实际上,我甚至只在onValueChange上执行)或者只是将其标记为无效时value不是仅数字的(这是IntegerBox的例子)。

答案 1 :(得分: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;
    }
}