【问题标题】:How can I retrieve the value of a PASTE (copy-pasta) event in a GWT TextBox?如何在 GWT TextBox 中检索 PASTE(复制粘贴)事件的值?
【发布时间】:2011-06-23 19:19:17
【问题描述】:

您好 SO 成员,

我想阻止用户在我的 TextBox 中复制粘贴值,如果且仅当值不符合特定条件时。

例如,我创建了一个用于电话号码的 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;博士: 见标题

感谢您的宝贵时间。 真诚的。

【问题讨论】:

    标签: java events gwt textbox copy-paste


    【解决方案1】:

    根据the MDC

    目前没有仅 DOM 的方式来获取被粘贴的文本

    IMO,您最好让“粘贴”发生,然后“重写”文本框的值以去除非数字(实际上,我什至宁愿只在 onValueChange 上执行此操作)或者简单地将框标记为无效时value 不是纯数字的(例如,这就是 IntegerBox 所做的)。

    【讨论】:

    • "no DOM-ONLY way" 这是否意味着还有另一种方法?但是,是的,我同意你的看法,谢谢你的时间!
    【解决方案2】:

    只需将旧值保存在局部变量中,然后在您执行逻辑的事件之后立即保存,如果值不正确,请保留旧文本。

    @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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-03
      • 1970-01-01
      • 1970-01-01
      • 2011-03-04
      • 1970-01-01
      相关资源
      最近更新 更多