如何检索 GWT 文本框中的 PASTE(复制粘贴)事件的值?

发布于 2024-11-16 16:04:02 字数 654 浏览 1 评论 0原文

SO 成员大家好,

我想阻止用户在我的文本框中复制粘贴值,当且仅当这些值不符合特定条件时。

例如,我创建了一个 DigitsOnlyTextBox ,它将用于电话号码。 将值复制粘贴到其中

this.sinkEvents(Event.ONPASTE);

我已经做到了,因此只能在框中输入 Character.isDigit 字符,并且用户无法使用 :和

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

但我想验证复制粘贴是否字符串是“仅数字”,如果是这样,则让事件发生(因此添加文本)。

长话短说:博士: 请参阅标题

感谢您的宝贵时间。 真挚地。

Hello fellow SO members,

I want to prevent the user from copy-pasting values in my TextBox IF AND ONLY IF the values do not respect a certain condition.

For instance, I created a DigitsOnlyTextBox which will be used for phone numbers.
I already made it so only Character.isDigit characters can be typed into the box, and the user cannot copy-paste values into it, using :

this.sinkEvents(Event.ONPASTE);

and

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

But I'd like to verify if the copy-pasted String is "digits only" and if so, let the event happen (therefore the text added).

tl;dr :
see title

Thank you for your time.
Sincerely.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

捶死心动 2024-11-23 16:04:02

根据MDC

目前没有仅使用 DOM 的方式来获取正在粘贴的文本

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

According to the MDC:

There is currently no DOM-only way to obtain the text being pasted

IMO, you'd better let the "paste" happen and then "rewrite" the textbox's value to strip non-numerics (actually, I'd even rather do it onValueChange only) or simply flag the box as invalid when its value isn't numeric-only (this is what IntegerBox does for instance).

拒绝两难 2024-11-23 16:04:02

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

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

Just save the old value in a local variable and right after the event you excecute your logic and if the value is not ok just keep the old text.

@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;
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文