首页 > 解决方案 > GWT 奇怪的 onblur 处理程序行为

问题描述

嗨,我正在为流面板使用焦点和模糊处理程序来添加轮廓。但是,鉴于代码,我得到了一些奇怪的行为:

            panel.addDomHandler(new FocusHandler() {
                @Override
                public void onFocus(FocusEvent focusEvent) {
                    panel.addStyleName("FOOSTYLE");
                }
            }, FocusEvent.getType());


            panel.addDomHandler(new BlurHandler() {
                FlowPanel _panel = focusPanel;
                boolean init = false;
                @Override
                public void onBlur(BlurEvent blurEvent) {
                    console.log("Do Blur");
                    panel.removeStyleName("FOOSTYLE");
                }
            }, BlurEvent.getType());

模糊处理程序中的 removeStyleName() 似乎无缘无故地被调用,还要注意日志,当随机模糊处理程序被调用时,它甚至没有被执行,如果有的话。

有什么建议么?

标签: javagwt

解决方案


要处理焦点和模糊事件,您应该使用FocusPanel. 它实现了HasFocusHandlersHasBlurHandlers因此您可以调用addFocusHandler()andaddBlurHandler()而不是低级addDomHandler()方法。

如果您需要使用FlowPanel来布置您的小部件,您可以将其添加到FocusPanel.


推荐阅读