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

标签 javascript jsf richfaces

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

所以我有下一个:

<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 - 一旦你选择了日期/时间,但你只想改变时间,你不能这样做,因为你不能选择当天,所以你看不到时间编辑器。

我正在使用 rich faces 3.3.3

谢谢

最佳答案

ondateselectedontimeselected 属性仅在日期或时间实际更改时调用,而不是在您仅单击日期或关闭时间编辑器时调用。没有标准的 <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>

请注意,ondateselectedontimeselectontimeselected 属性已被删除,oncollapse 属性已更改。另请注意,必须在 DOM 中填充日历后执行脚本。所以上面的工作是这样的。如果您想将脚本移动到它自己的 JS 文件中(这是一件好事),请确保它仅在 DOM 就绪时执行(即将脚本放在 <body> 的末尾,或者在 window.onload()jQuery.ready() 之前执行)。

关于javascript - 如何使用 rich :calendar 在日期选择上显示 timeEditor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12249095/

相关文章:

java - Primefaces 响应 <p :panelGrid> not working with 5 columns

java - 在 JSF 2.0 中检索其他组件的客户端 ID

对象中的 Javascript 对象错误

javascript - 让 Rails javascript 代码变得干燥

javascript - 这个对象在 .mouseenter() 函数中

css - primefaces 数据表中的多个彩色行?

javascript - 引号转义以正确地将参数从 HTML 输入值传递到 PHP echo 中的 javascript 函数

java - 如何在 jsf 中使用接缝 validator ?

html - RichFaces 页面主题——包含 CSS 文件?

css - 如何忽略默认的 Richface 样式