我想在日期框中禁用特定日期。我尝试使用此代码,但指定的日期(当前日期)不会被禁用。
final DateBox dateBox = new DateBox();
dateBox.getDatePicker().addShowRangeHandler(new ShowRangeHandler<Date>() {
@Override
public void onShowRange(final ShowRangeEvent<Date> event) {
List<Date> disabledDates = new ArrayList<Date>();
disabledDates.add(new Date());
dateBox.getDatePicker().setTransientEnabledOnDates(false, disabledDates);
}
});
还有其他办法吗?
编辑:按照apanizo的示例,第29.5天显示为灰色,但仍可点击。
答案 0 :(得分:1)
真的很抱歉,我没有测试我上次回答的代码。
我刚试过,你的代码对我有用,我唯一做的就是通过setTransientEnabledOnDates(false, dateToDisable);
方法传递我不想要的所有日期。
示例:
public void onModuleLoad() {
final DateBox dateBox = new DateBox();
dateBox.getDatePicker().addShowRangeHandler(new ShowRangeHandler<Date>() {
@Override
public void onShowRange(final ShowRangeEvent<Date> dateShowRangeEvent) {
final Date today = new Date(); //30 May 3014
final Date yesterday = new Date(today.getTime()- 24*60*60*1000);
//disabling yesterday - 29 May of 2014
dateBox.getDatePicker().setTransientEnabledOnDates(false, yesterday);
}
});
RootPanel.get().add(dateBox);
}
如果要在禁用日期禁用click事件,则这是已解决但未传递的错误。
请参阅: https://code.google.com/p/google-web-toolkit/issues/detail?id=7876
我认为在GWT的2.7版本中它会被发布,同时你可以在com.google.gwt.user.datepicker.client.CellGridImpl
的第77行中修改它:
addDomHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
if (isActive(Cell.this)) {
setSelected(Cell.this);
}
}
}, ClickEvent.getType());
中
答案 1 :(得分:0)
只需在日期选择器上添加值更改的侦听器,即可听取日期中的任何更改。
例如,如果不允许当前日期并选择它,则只需丢弃更改并恢复到上一个日期或在需要时显示警告消息,并为当前日期添加样式以将其视为已禁用。
此处使用日期时间格式仅检查日期,检查日期时丢弃时间。
示例代码:
private Date prevDate;
...
final DateBox dateBox = new DateBox();
final DateTimeFormat dateTimeFormat=DateTimeFormat.getFormat("MM/dd/yyyy");
dateBox.getDatePicker().addValueChangeHandler(new ValueChangeHandler<Date>() {
@Override
public void onValueChange(ValueChangeEvent<Date> event) {
if (dateTimeFormat.format(event.getValue()).equals(dateTimeFormat.format(new Date()))) {
dateBox.setValue(prevDate);
// show warning message here
}else{
prevDate=event.getValue();
}
}
});