2011-06-16 37 views
1

我想取消以下處理程序的事件。下面的示例類顯示了我嘗試的內容。儘管文本框中的keyevent被取消,但仍然調用第二個處理程序。處理程序的順序是正確的。我可以證明Handler1在Handler2之前被調用。在這個樣本類中,我可以使用一個標誌,但在我的真實類中,處理程序和文本框是分離的,因此標誌將會成爲問題。有任何想法嗎?取消以下處理程序的GWT事件

public class EventTestTextBox extends TextBox { 

    public static class Handler1 implements KeyUpHandler { 
     @Override 
     public void onKeyUp(KeyUpEvent event) { 
      if (event.isShiftKeyDown()) { 
       event.preventDefault(); 
       event.stopPropagation(); 
       ((TextBox)event.getSource()).cancelKey(); 
      } 
     } 
    } 

    public static class Handler2 implements KeyUpHandler { 
     @Override 
     public void onKeyUp(KeyUpEvent event) { 
      Window.alert("should not appear if shift-key is down."); 
     } 
    } 

    public EventTestTextBox() { 
     super.addKeyUpHandler(new Handler1()); 
     super.addKeyUpHandler(new Handler2()); 
    } 

} 

回答

0

event.stopPropagation()取消event bubbling,即防止被觸發對父元素的處理程序。它不會阻止同一元素上的處理程序接收事件。

+0

感謝您的回答。但在這種情況下,我想要阻止以下處理程序。所以我猜這是不可能的? – oleh 2011-06-21 19:51:27

0

我和你有完全一樣的問題。你有沒有設法找到解決方案?

我想唯一的解決方案是不註冊事件監聽器,讓handler1派發(或不)到處理程序2。

+0

我找不到解決辦法。你需要和適當的處理者一起工作。 – oleh 2012-09-11 10:41:32

+0

我實現了一個委託機制。在那裏我將keyfiltering作爲唯一的KeyDownHandler和所有其他處理程序添加到keyfilter中。它不是100%看不見的,但它工作正常,不會太麻煩。 – 2012-09-14 09:17:28