我创建了一个自定义文本框,如下所示,将其用作网址框
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");
}
}
});
}
}
类似我为数字框做的。 我的问题是,当我在网址框中输入无效网址并点击数字框时,它也开始验证数字框。我想要它,直到它满足网址框的要求,它不应该开始验证数字框 我怎样才能做到这一点。 感谢。
答案 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");
}
}
}