ORACLE APEX 5.0

时间:2015-07-02 05:26:29

标签: javascript oracle11g oracle-apex

我正在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:演示

1 个答案:

答案 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天限制。
然后第一个操作显示警报,第二个操作将显示该字段。

动态操作 - 检查边界

  • 事件:更改
  • 选择类型:jQuery选择器
  • jQuery选择器:td[headers=START_DATE] input.hasDatepicker
  • 条件:JavaScript表达式
  • 表达:!apex.item(this.triggeringElement).isEmpty() && !isBetweenNowAnd(this.triggeringElement, 45)

真实行动:

行动1:提醒

  • 文字:开始日期必须在今天的45天内!
  • 点击页面加载:

操作2:设置值

  • 设置类型:JavaScript表达式
  • 表达:""
  • 取消更改事件:
  • 点击页面加载:
  • 受影响的元素:触发元素

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”中的链接应用程序中构建了这些内容,因此您可以在那里查看。