如何在单击事件时一次仅验证一个文本框

时间:2012-12-24 09:05:04

标签: java events event-handling zk

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

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");

                    }

                }

            });

        }

    }

类似我为数字框做的。 我的问题是,当我在网址框中输入无效网址并点击数字框时,它也开始验证数字框。我想要它,直到它满足网址框的要求,它不应该开始验证数字框 我怎样才能做到这一点。 感谢。

2 个答案:

答案 0 :(得分:1)

哈,你让我在那里难过了。在圣诞节前夕,你也感到羞耻;)

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

我希望这是有道理的。如果您从UX角度删除Messagebox,那么这个“双重验证”问题就会消失。

答案 1 :(得分: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");

                    }
            }
    }