0

要求:在模糊/表单提交时屏蔽日期选择器。

我能够在将 forceparse 设置为 false 的情况下完成 onBlur 的屏蔽,但我无法在 datepicker 中导航到下个月/年,可能是因为我正在覆盖 DOM 处理程序。

dob.setForceParse(false);
dob.addDomHandler(new BlurHandler() {           
    @Override
    public void onBlur(BlurEvent event) {               
        dob.getTextBox().setText(**masked value**);
    }
}, BlurEvent.getType());
dob.addDomHandler(new FocusHandler() {          
    @Override
    public void onFocus(FocusEvent event) {
        dob.setValue(**unmasked value**);
    }
}, FocusEvent.getType());

我无法使用 ChangeDateHandler,因为它会自动将“1/1/19”假定为“1/1/1900”并在文本输入的中途屏蔽文本。我还有其他方法可以处理吗?

4

1 回答 1

0

如果您在使用DatePicker's时遇到问题,TextBox您可以将其隐藏并改用任何其他小部件。

TextBox 主要用于显示DatePicker焦点的时间、显示选定的日期和手动输入日期。

这是一个示例代码,如何使用您自己的代码TextBoxDatePicker我曾经在 下方显示VerticalPanel):DatePickerTextBox

VerticalPanel container = new VerticalPanel();

final DatePicker dob = new DatePicker();

// hide DatePicker's TextBox
dob.getTextBox().getElement().getStyle().setDisplay(Display.NONE);

final TextBox box = new TextBox(); 
box.addFocusHandler(new FocusHandler() {
    @Override
    public void onFocus(FocusEvent event) {
        dob.show();
        box.setText("**unmasked value**");
    }
});

dob.addHideHandler(new HideHandler() {
    @Override
    public void onHide(HideEvent hideEvent) {
        box.setText("**masked value**");
    }
});

dob.addChangeDateHandler(new ChangeDateHandler() {
    @Override
    public void onChangeDate(ChangeDateEvent evt) {
        Window.alert("ChangeDateEvent");
    }
});

container.add(box);
container.add(dob);

请注意,您需要在专注dob.show()时打电话。TextBox我也使用DatePicker'sHideHandler而不是TextBox'sBlurHandler来显示掩码值,但您可以根据需要更改它。

如果您想更改解析日期的方式"1/1/19",现在您可以将自己的解析器添加到TextBox.

于 2016-12-04T19:43:13.323 回答