Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 日期选择器don';采摘同一日期GWT后关闭_Java_Jquery_Gwt_Datepicker - Fatal编程技术网

Java 日期选择器don';采摘同一日期GWT后关闭

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

我使用以下方法从java脚本调用java来关闭日期选择器弹出窗口

    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,我明白了你的意思。但在这之后,它仍然不起作用。它不调用方法哈!那
可能不是你所认为的!更新了我的答案。不,它不起作用。我无法找出原因。