我的表单/表格上的持续时间字段有困难。
用户需要指明HH:MM
会议花费了多长时间。
该列在表中应具有什么数据类型。目前是
TIMESTAMP
如何使该字段具有“HH:MM”的输入掩码。我希望用户能够立即输入“0130”并将其格式化为“01:30”。
需要报告这些时间,所以我认为输入数据VARCHAR
无济于事。
我的表单/表格上的持续时间字段有困难。
用户需要指明HH:MM
会议花费了多长时间。
该列在表中应具有什么数据类型。目前是TIMESTAMP
如何使该字段具有“HH:MM”的输入掩码。我希望用户能够立即输入“0130”并将其格式化为“01:30”。
需要报告这些时间,所以我认为输入数据VARCHAR
无济于事。
老实说,这并不像人们想象的那么容易,而且可能更多的是从用户界面的角度来看,而不是从技术角度来看。
最简单的出路?顶点日期时间选择器。老实说,如果您是这项技术的新手,我建议您使用它,特别是如果您最初想避开 javascript/jquery。
让我们这样说吧:日期选择器很好并且工作得很好,但是时间真的没有那么棒。
不是那么热。在您点击“关闭”之前,输入项中的值不会改变。老实说,时间组件似乎是最后一秒的草率添加。但是,它有效。(但我仍然将该字段设置为只读,以便用户无法直接输入文本。)
允许输入文本意味着需要根据正确的格式掩码对其进行验证。jQuery(日期选择器)和 Oracle 中的格式掩码不同,您的 oracle 格式掩码可能无法在日期选择器中使用,从而增加了更多复杂性。也没有“实时”日期验证(也没有日期时间),只有内置项目验证将检查格式掩码并在提交时触发。
无论如何,我会说看看它。将您的项目设置为显示为日期选择器,并使用设置下的格式掩码获取日期时间选择器:
现在您当然可以进一步推动它,尽管它会花费一些努力。不过有几种选择。
就个人而言,当我实施日期+时间时,我总是将日期与时间分开在 2 个字段中。1 个带有日期组件,1 个带有时间组件,同时隐藏原始值的项目(总共 3 个项目)。然后我在日期项上使用 datepicker,并在时间项上使用 jquery timepicker 插件。在提交时,我将这两个值加在一起并在一个日期中解析它们,然后再次将此值放入原始项目中(以允许标准处理对源设置为数据库列的项目进行处理)。
一个时间选择器的例子在这里,另一个在这里. 它们都不难实现。他们也有很好的文档。我不想在这里深入研究它的实现,我建议你先看看它,看看它有多吓到你。(我设置了一个 apex 演示,但目前时间有点紧迫)。
例如,使用 Trent 的(第二个链接)插件:
将所需的 js 文件添加到页面(假设 apex 4.2,将其放在 javascript 文件 urls 中)
#IMAGE_PREFIX#libraries/jquery-ui/1.8.22/ui/jquery.ui.slider.js
#IMAGE_PREFIX#custom/jquery-ui-timepicker-addon.js
使用诸如此类的 onload 代码来初始化字段
$("#P95_DEPARTURE_TIME").timepicker({hourGrid: 4,minuteGrid: 10});
它最终会看起来像这样:
如果您希望它生效,则选择器之间的任何进一步交互都需要在 javascript 代码中处理。不要忘记服务器验证。
至于项目,我的隐藏日期项目有格式掩码DD-MON-YYYY HH24:MI
。格式掩码很重要,因为项目是绑定变量,而绑定变量是varchar2
. html 表单中的值也就是文本。例如,这是在我显示的日期项上,时间项的设置类似:
然后在提交后的计算中,我再次将这些值粘合在一起并将它们放入将值保存到数据库的 m 中:
:P95_DEPARTURE_DATE_DISP||' '||:P95_DEPARTURE_TIME
虽然这只是设置的简短指南,但一旦您对产品更加熟悉,可能会很有趣。
apex-plugin 上还有 2 个 timepicker 插件,但老实说,与这些已经存在的精细 jquery 插件相比,我一点也不觉得它们有趣。
给它一些想法,看看它。
APEX 4.2:只是为将来的观看提供一些启示;现在有大量 Apex 插件用于选择日期/时间或两者都返回您需要的日期时间格式的变体。例如,在您的情况下,HH:MM 或 HH24:MI。
我个人使用了来自http://www.apex-plugin.com的 TimePicker 插件,我推荐它没有问题。