2008-10-18 124 views
5

我有以下代碼片段,changeTextArea是一個TextArea對象。停止冒泡GWT中的事件

changeTextArea.addKeyboardListener(new KeyboardListenerAdapter() 
    public void onKeyPress(Widget sender, char keyCode, int modifier){ 
    //do something 
    //I WISH TO STOP THE EVENT THAT MAPS TO THIS KEYPRESS FROM BUBBLING ANY FURTHER 
    } 
} 

我怎麼會停止導致被從changeTextArea向上冒泡到包含changeTextArea小組/小工具/複合/無論調用此方法的事件。簡而言之,我如何阻止它進一步冒泡。任何幫助將不勝感激(尤其是代碼示例)。

回答

6

據我知道你不能通過鍵盤監聽做到這一點,但它可以通過使用DOM類添加事件預覽:

DOM.addEventPreview(EventPreview preview) 

然後,當你得到事件:

onEventPreview(Event event) 

你應該返回false,說你想取消事件。 Event對象也支持此方法:

public final void cancelBubble(boolean cancel) 

取消給定事件冒泡。這將阻止事件傳播到父元素。

你可以在這裏找到更多的細節: http://google-web-toolkit.googlecode.com/svn/javadoc/1.5/index.html?overview-summary.html

4

你絕對可以使用事件的cancelBubble()和的preventDefault()方法,從能夠訪問到該活動的代碼中。沒有必要事件預覽...

2

您可以調用發件人的cancelKey()事件。以下是一個只允許輸入數字的例子,其他所有的鍵都會被拒絕。

私有類RowColChangeHandler實現KeyPressHandler {

public void onKeyPress(KeyPressEvent event) { 
     char keyCode = event.getCharCode(); 
     if(keyCode <48 || keyCode >57) 
     { 
      ((TextArea)event.getSource()).cancelKey(); 
     } 
    } 
} 
0

,你可以儘可能做 event.doit = false

+0

達到它也許有些解釋會讓你的答案更加有用:) – 2014-07-28 13:55:55