编程语言
首页 > 编程语言> > javascript-如何使用rich:calendar在选择日期时显示timeEditor

javascript-如何使用rich:calendar在选择日期时显示timeEditor

作者:互联网

我想制作一个日历,您可以在其中选择日期,然后自动选择时间.我不应该使用按钮来改变时间:(

所以我有下一个:

<rich:calendar id="currentDate" popup="true"
    datePattern="dd/MM/yyyy - HH:mm" enableManualInput="false"
    showFooter="false" required="true" resetTimeOnDateSelect="true"
    oncollapse="return timeSelected;"
    showWeeksBar="false" showWeekDaysBar="true"
    value="#{bean.currentDate}"
    ondateselected="timeSelected=false; Richfaces.getComponent('calendar',this).showTimeEditor(); return true;"
    ontimeselected="timeSelected=true; return true;"
    ontimeselect="timeSelected=true; return true;"
>
    <a4j:support event="onchange" ajaxSingle="true" />
</rich:calendar>

但这根本不起作用.
有两个问题.

1-选择一天时,将显示弹出窗口.但是,如果在不更改时间的情况下按“接受”,则无法关闭日历:(

2-一旦选择了日期/时间,但只想更改时间,则无法执行此操作,因为您无法选择当前日期,因此看不到时间编辑器.

我正在使用面孔3.3.3

谢谢

解决方法:

仅在实际更改日期或时间时才调用ondateselected和ontimeselected属性,而不是仅单击日期或关闭时间编辑器时才调用.没有标准的< rich:calendar>捕获这些的属性.您需要覆盖标准的calendar.js函数eventCellOnclick()(单击日期时调用)和hideTimeEditor()(关闭时间编辑器时调用).

以下内容适用于RichFaces 3.3.3(以及Mojarra 1.2_15和Tomcat 7.0.29).

<h:form id="form">
    <rich:calendar id="currentDate" popup="true"
        datePattern="dd/MM/yyyy - HH:mm" enableManualInput="false"
        showFooter="false" required="true" resetTimeOnDateSelect="true"
        showWeeksBar="false" showWeekDaysBar="true"
        value="#{bean.currentDate}"
        oncollapse="return this.component.timeSelected;"
    >
        <a4j:support event="onchange" ajaxSingle="true" />
    </rich:calendar>
</h:form>

<script>
    var currentDateComponent = $('form:currentDate').component;

    var originalCellOnClickFunction = currentDateComponent.eventCellOnClick;
    currentDateComponent.eventCellOnClick = function() {
        this.timeSelected = false;
        originalCellOnClickFunction.apply(this, arguments);
        currentDateComponent.showTimeEditor();
    };

    var originalHideTimeEditorFunction = currentDateComponent.hideTimeEditor;
    currentDateComponent.hideTimeEditor = function() {
        this.timeSelected = true;
        originalHideTimeEditorFunction.apply(this, arguments);
    };
</script>

请注意,ondateselected,ontimeselect和ontimeselected属性已删除,并且oncollapse属性已更改.另请注意,必须在DOM中填充日历后执行脚本.因此,上述工作保持原样.如果要将脚本移到其自己的JS文件中(这是一件好事),请确保仅在DOM就绪时执行脚本(即,将脚本放在< body>的末尾,或通过window.onload()执行)或jQuery.ready()).

标签:richfaces,jsf,javascript
来源: https://codeday.me/bug/20191127/2076186.html