1

我创建了一个自定义文本框,如下所示,将其用作 url 框

private class URLBox extends Textbox {
        // String value =null;
        URLBox(String infoValue) {
            if (!Utility.isBlank(infoValue)) {
                setValue(infoValue);

            } else {
                setValue("Enter URL");

            }
        }

        @SuppressWarnings("unchecked")
        public void initialize() {
            addEventListener("onClick", new EventListener() {

                public void onEvent(Event event) throws Exception {

                    Textbox tb = (Textbox) event.getTarget();
                    if (tb.getValue().equalsIgnoreCase("Enter URL")) {
                        tb.setValue("");
                    }

                }
            });



            addEventListener("onBlur", new EventListener() {

                public void onEvent(Event event) throws Exception {

                    final URLBox tb = (URLBox) event.getTarget();
                    if (Utility.isBlank(tb.getValue())) {
                        tb.setValue("Enter URL");
                    } else if (!PeopleInfoViewModel.IsMatch(tb.getValue())) {
                         Messagebox.show("Please Enter a valid URL");

                    }

                }

            });

        }

    }

我对数字框所做的类似。我的问题是当我在 url 框中输入无效的 url 并单击 numberbox 时,它也开始验证数字框。我希望在它满足 url 框的要求之前它不应该开始验证数字框我该如何实现这一点。谢谢。

4

2 回答 2

1

哈,你让我难倒了好一阵子。圣诞节前夜也是,真丢脸;)

我能够重现您的问题,这只是使用Messagebox.show. 当onBlur事件检测到验证问题时,您调用Messagebox.show显示消息框。消息框上有一个“确定”按钮,它在 DOM 中获得焦点。通过将焦点赋予按钮,NumberBox失去焦点并onBlur触发事件,即使您刚刚选择了它。

我希望这是有道理的。Messagebox如果从用户体验的角度来看,你确实应该删除它,这个“双重验证”问题就会消失。

于 2012-12-24T17:50:18.140 回答
0

我建议不要提供 initialize() 方法,而是像这样将事件侦听器部分移动到类级别

final class OnClickListener implements EventListener {
        @Override
        public void onEvent(Event event) throws Exception {
            Textbox tb = (Textbox) event.getTarget();
                    if (tb.getValue().equalsIgnoreCase("Enter URL")) {
                        tb.setValue("");
                    }
        }
    }

final class OnBlurListener implements EventListener {
        @Override
        public void onEvent(Event event) throws Exception {
           final URLBox tb = (URLBox) event.getTarget();
                    if (Utility.isBlank(tb.getValue())) {
                        tb.setValue("Enter URL");
                    } else if (!PeopleInfoViewModel.IsMatch(tb.getValue())) {
                         Messagebox.show("Please Enter a valid URL");

                    }
            }
    }
于 2012-12-24T11:09:01.070 回答