我正在oracle apex中构建表格形式,我需要验证开始日期和结束日期。
我有开始日期和结束日期的表格形式的日期选择器字段,开始日期不应接受日期减去45从系统日期(今天的日期)起的天数,它不应该大于系统日期。
即使我将开始日期作为今天的日期,我也会收到错误。当start_date小于(今天的日期--45天)
时,我需要提醒我正在使用 ORACLE APEX 5.0 版本
在页面上,我在“功能和全局变量声明”部分中定义了此功能:
function f_validate_sd(pThis) {
var row_id = pThis.id.substr(4);
var start_date = $('#f10_'+row_id).val();
//var end_date = $('#f11_'+row_id).val();
var currentDate = new Date();
var dy = currentDate.getDate();
var month = currentDate.getMonth() + 1;
var year = currentDate.getFullYear();
var sd = ( dy + "-" + month + "-" + year);
var subdate = new Date(sd);
var numberOfDaysToAdd = 45;
subdate.setDate(subdate.getDate() - numberOfDaysToAdd );
var dd = subdate.getDate();
var mm = subdate.getMonth() + 1;
var yy = subdate.getFullYear();
var sub = ( dd + "-" + mm + "-" + yy );
alert(start_date);
alert(sub);
alert(start_date - sub );
alert(sd);
if(start_date < sub ) {
alert("START DATE should be within 45 days from todays date");
$('#f10_'+row_id).val(" ");}
}
在表格形式中,我通过将此功能添加到“START_DATE”列的“自定义属性”字段来调用此函数:
onchange="javascript:f_validate_sd(this);"
当我运行我的页面并更改日期时,消息“ NaN ”作为第三个警报。
我在这里设置了一个示例应用程序: DEMO
您可以使用以下凭据在apex.oracle.com上查看:
工作区:APEX_CHECKBOX
用户名:appuser
PWD:演示
答案 0 :(得分:1)
定义支票:
在JavaScript中使用一些实时算术。
Page&gt;功能和全局变量声明
我修改了我之前回答中使用的一些代码:Comparing dates using Dynamic Action on DatePicker Oracle Apex
function isBetweenNowAnd(pDateItem, pRange){
function getRange(pRange){
var future = new Date();
future.setDate(future.getDate() + pRange);
return future;
};
function cutTime(pDate){
return new Date(pDate.getFullYear(), pDate.getMonth(), pDate.getDate());
};
// check if pDateItem leads to a selection
// check if it is a datepicker
// check if a date has been selected
// if pRange is at least a number
if ( $(pDateItem).length
&& $(pDateItem).data("datepicker")
&& $(pDateItem).datepicker("getDate") !== null
&& parseInt(pRange) !== "NaN"
)
{
var future = getRange(pRange);
var check = $(pDateItem).datepicker("getDate");
var one = cutTime(check);
var two = cutTime(future);
return one <= two;
};
return false;
}
我真的很讨厌使用“onxxx”属性。这只是您自己的应用程序中的混淆。如果您不知道如何使用javascript或jQuery,那么请阅读而不是使用这些烦人的属性轻松解决问题。
此动态操作将在更改开始日期时触发,并且仅在满足表达式中的条件时触发真实操作:项目不为空(当用户空白选择时不触发)且日期超出45天限制。
然后第一个操作显示警报,第二个操作将显示该字段。
动态操作 - 检查边界
td[headers=START_DATE] input.hasDatepicker
!apex.item(this.triggeringElement).isEmpty() &&
!isBetweenNowAnd(this.triggeringElement, 45)
真实行动:
行动1:提醒
操作2:设置值
""
UX:不要让用户选择今天过去的日期+ 45通过UI开始
使用之前的DA,您可以阻止对项目进行手动更改(更改不使用弹出窗口的日期文本)以及UI上的选择,但您也可以在日期选择器中禁用不适用的日期。
刷新表格形式(例如分页)以及页面加载后,此DA将触发。它将设置日期选择器的最大可选日期。
动态操作 - 检查边界
操作:执行JavaScript
代码:
$("td[headers=START_DATE] input.hasDatepicker").each(function(){
$(this).data("datepicker").settings.maxDate = "+45";
})
没有受影响的元素
(有人想知道为什么我没有直接调用$("...").datepicker("option","maxDate","+45")
:这会在Universal Theme中删除日期选择器的视觉效果,因为它会从对话框按钮中删除类)
考虑到JavaScript可以被规避。操纵日期并保存它并不难。然而,尝试添加服务器验证并不是真正的用途,因为您只能指定“用于创建和修改的行” - 这将触发验证上述记录中的非相关变更。但你应该知道。如果您的表上有该审计列,则可以使用验证来检查日期与记录的“创建”日期。
我已经在“第3页 - 更新TOM”中的链接应用程序中构建了这些内容,因此您可以在那里查看。