2011-05-06 40 views
5

通常情况下,更改事件将触发文本字段失去它的焦点(上模糊)之后。文本字段“改变”事件触发只在模糊

但我需要尽快的磁场变化值触发,无需失去重点领域。

的KeyListener的不剪,因为值可能会,例如,从条形码扫描器。

有没有办法做到实现这一目标?

在此先感谢!

回答

1

我还没有和EXT-GWT的工作,但是这是你必须做的:你必须使用的KeyListener,并添加一个侦听ONPASTE。 “更改”事件由浏览器提供,并且仅在焦点消失(模糊期间)以及文本已更改时触发。

+0

谢谢您的回答。不幸的是,在尝试应用您的解决方案之后,似乎Ext-GWT中的Event类型“OnPaste”(代表DOM ONPASTE事件)也无法正常工作。 :( – 2011-05-06 22:12:08

+0

查看是否[this](http://www.sencha.com/forum/showthread.php?88080-Listener-for-Event.ONPASTE)有所帮助 – Raze 2011-05-07 05:00:53

+0

对粘贴事件的支持不同于浏览器浏览器,详细:[http://www.quirksmode.org/dom/events/cutcopypaste.html](http://www.quirksmode.org/dom/events/cutcopypaste.html)(它看起来像它根本不适用于Opera),请在[测试页面](http://www.quirksmode.org/dom/events/tests/cutcopypaste.html)上使用浏览器进行试用。每个浏览器触发事件​​的哪个元素 - 以及哪一个Ext-GWT注册该侦听器。 – 2011-05-07 08:07:18

0

我不认为这是对所有的环境下发挥跨浏览器的事件。所以“穷人的解决方案”是每隔一秒左右轮询文本字段。事实上,这样的测试可以很快执行,如果你不一次性在很多文本字段上使用它,你应该没问题。

如果你喜欢,你可以用我的小示例代码(它可以在一个普通的文本框GWT,但它应该是直截了当地对一个Ext-GWT文本字段适应)

@Override 
public void onModuleLoad() { 

    final TextBox textBox = new TextBox(); 
    final int delayMilliseconds = 1000; 

    Scheduler.get().scheduleFixedDelay(new RepeatingCommand() { 

     private String previousValue = ""; 

     @Override 
     public boolean execute() { 

      final String newValue = textBox.getValue(); 
      if (!previousValue.equals(newValue)) { 
       try { 
        valueChanged(); 
       } finally { 
        previousValue = newValue; 
       } 
      } 
      return true; 
     } 

     private void valueChanged() { 
      // React on the change 
      Window.alert("Value changed"); 
     } 

    }, delayMilliseconds); 

    RootPanel.get().add(textBox); 
} 
相关问题