Как я могу получить значение события PASTE (copy-pasta) в GWT TextBox? - PullRequest
2 голосов
/ 23 июня 2011

Здравствуйте, члены 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; dr: см. Заголовок

Спасибо за ваше время.С уважением.

Ответы [ 2 ]

1 голос
/ 24 июня 2011

Согласно MDC :

В настоящее время не существует способа только для DOM получить вставляемый текст

IMO, вы 'Лучше позволить «вставке» произойти, а затем «переписать» значение текстового поля, чтобы убрать нечисловые значения (на самом деле, я бы даже предпочел сделать это только для onValueChange) или просто пометить поле как недействительное, если его значение не только для числовых(это то, что IntegerBox делает, например).

0 голосов
/ 27 июля 2015

Просто сохраните старое значение в локальной переменной и сразу после события, которое вы выполняете, и если значение не в порядке, просто сохраните старый текст.

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