Java 日期选择器don';采摘同一日期GWT后关闭
我使用以下方法从java脚本调用java来关闭日期选择器弹出窗口Java 日期选择器don';采摘同一日期GWT后关闭,java,jquery,gwt,datepicker,Java,Jquery,Gwt,Datepicker,我使用以下方法从java脚本调用java来关闭日期选择器弹出窗口 private native void attachInternal() /*-{+ $wnd.jQuery("div.datePickerDay.datePickerDayIsValue").on( "Click", function() { this.@com.booxi.admin.client.common.ui.text.DateFormatter::uiDatePickerPo
private native void attachInternal() /*-{+
$wnd.jQuery("div.datePickerDay.datePickerDayIsValue").on( "Click", function() {
this.@com.booxi.admin.client.common.ui.text.DateFormatter::uiDatePickerPopup.hide();
console.log("OK");
});
}-*/;
在所附的方法中再次调用此方法
问题是,日期选择器在选择已选择的同一日期后不会关闭,但在值更改时它会关闭。我希望在选择与之前相同的日期后也关闭它。
附加方法如下所示
public void attach() {
attachInternal();
datePickerValueChangeRegistration = uiDatePicker.addValueChangeHandler(new ValueChangeHandler<Date>() {
@Override
public void onValueChange(ValueChangeEvent<Date> event) {
uiDatePickerPopup.hide();
uiTextDate.setErrorVisible(false);
uiTextDate.setTextNoFormat(Moment.moment(event.getValue()).format("L"));
}
});
textDateClickRegistration = uiTextDate.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
//if (uiTextDate.isReadOnly())
// return;
if (!uiTextDate.isEnabled())
return;
showPopup();
}
});
public void attach(){
附件内部();
datePickerValueChangeRegistration=uiDatePicker.addValueChangeHandler(新的ValueChangeHandler(){
@凌驾
ValueChange上的公共作废(ValueChangeEvent事件){
uiDatePickerPopup.hide();
uiTextDate.setErrorVisible(false);
uiTextDate.setTextNoFormat(矩.矩(event.getValue()).format(“L”);
}
});
textDateClickRegistration=uiTextDate.addClickHandler(新的ClickHandler(){
@凌驾
公共作废一次点击(点击事件){
//if(uiTextDate.isReadOnly())
//返回;
如果(!uiTextDate.isEnabled())
返回;
showPopup();
}
});
您的JSNI是错误的:您得到了对hide()
方法的方法引用,但没有实际调用它。此外,回调中的this
可能是HTML元素,而不是该方法所属的类(最后,click
可能必须全部用小写字母,但我不知道jQuery,所以我可能错了)
因此应改为:
private native void attachInternal() /*-{
var that = this;
$wnd.jQuery("div.datePickerDay.datePickerDayIsValue").on( "click", function() {
that.@com.booxi.admin.client.common.ui.text.DateFormatter::uiDatePickerPopup.hide()();
console.log("OK");
});
}-*/;
有点晚了,但如果有人有同样的问题,也许会有帮助 我犯了相同的错误。问题是,更改事件仅在选择了不同的值时才会触发。如果用户再次选择相同的值,则不会发生值更改,事件不会触发,代码不会执行,弹出窗口不会隐藏 您必须使用click事件而不是value change事件。然后,每次单击,即使是在旧值上,代码也会执行。但是,如果您只是将更改事件替换为click事件,那么当用户单击日期选择器的标题时,代码也会执行,例如,当他单击箭头以选择不同的mon时这将阻止日期选择器的功能 因此,在单击事件中,您必须检查单击是否确实在日期单元格中,而不是在标题中。这可以通过
元素.as(event.getNativeEvent().getEventTarget())
完成,并检查元素的内容,最简单的方法是检查内部文本是否是介于1和31之间的日期号
代码是这样的
uiDatePickerPopup.addDomHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Element target = Element.as(event.getNativeEvent().getEventTarget());
String targetContent = target.getInnerText();
try {
int d = Integer.parseInt(targetContent);
if (d >= 1 && d <= 31) {
uiDatePickerPopup.hide();
...
enter the rest of your code here
...
}
} catch (Exception e) {
/* ignore, click was not on a date cell */
}
}
}, ClickEvent.getType());
uidatepickerpoup.addDomHandler(新的ClickHandler(){
@凌驾
公共作废一次点击(点击事件){
Element target=Element.as(event.getNativeEvent().getEventTarget());
字符串targetContent=target.getInnerText();
试一试{
int d=整数.parseInt(targetContent);
如果(d>=1&&d,我明白了你的意思。但在这之后,它仍然不起作用。它不调用方法哈!那这可能不是你所认为的!更新了我的答案。不,它不起作用。我无法找出原因。