你好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;博士: 见标题
感谢您的时间。 此致。
答案 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;
}
}