我想制作一个日历,您可以在其中选择日期,并且可以自动选择时间。我不应该使用按钮来更改时间:(
所以我有下一个:
<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
谢谢
最佳答案
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()
之前执行)。
关于javascript - 如何使用 rich :calendar 在日期选择上显示 timeEditor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12249095/