>我创建了一个自定义文本框,如下所示,用于将其用作网址框
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 并单击数字框时,它也开始验证数字框。我希望在它满足 url 框的要求之前,它不应该开始验证数字框 我怎样才能做到这一点。 谢谢。
哈,你让我在那里难倒了好一会儿。在平安夜也是如此,你;)
我能够重现您的问题,这只是使用Messagebox.show
的人工制品。当onBlur
事件检测到验证问题时,调用显示消息框的Messagebox.show
。消息框上有一个"确定"按钮,该按钮在 DOM 中获取焦点。通过为按钮提供焦点,NumberBox
将失去焦点并触发onBlur
事件,即使您刚刚选择了它也是如此。
我希望这是有道理的。如果你删除Messagebox
,这个"双重验证"问题就会消失,从用户体验的角度来看,你真的应该这样做。
我的建议是,不要给出 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");
}
}
}