1

description, previous_value, unit_price我的 Oracle Apex 应用程序中有一个包含字段的表格表单。

我需要用previous_value字段上的数据填充字段的值descriptionprevious_value我有一个查询来从数据库中获取字段的值。我需要将onChange事件添加到description字段。随着字段的变化,description字段的值previous_value应该使用我的查询填充。

我怎么能这样做?

4

1 回答 1

2

您可以通过多种方式将更改事件绑定到字段。通过 td 标题定位,或编辑列,然后在“元素属性”字段中添加一个类(例如“fireAjax”)。然后,您可以使用 javascript 代码绑定到事件,或者通过动态操作执行此操作。

您可以使用以下两种形式中的任何一种进行 ajax 调用:通过 htmldb_Get 或使用 jquery.post:

$('td[headers="ENAME"] input').change(function(){   
   var ajaxRequest = new htmldb_Get( null , $v('pFlowId') , 'APPLICATION_PROCESS=get_job' , $v('pFlowStepId'));
   ajaxRequest.addParam('x01', $(this).val());
   ajaxResult = ajaxRequest.get();
   $(this).closest("tr").find("td[headers='JOB'] input").val(ajaxResult);
});

或者

$('td[headers="ENAME"] input').change(function(){
var that = this;
$.post('wwv_flow.show', 
       {"p_request"      : "APPLICATION_PROCESS=get_job",
        "p_flow_id"      : $v('pFlowId'),
        "p_flow_step_id" : $v('pFlowStepId'),
        "p_instance"     : $v('pInstance'),
        "x01"            : $(this).val()
        },
        function(data){ 
           var eJob = $(that).closest("tr").find("td[headers='JOB'] input");
           eJob.val(data);
        },
        "text"
      );
});

使用此应用程序进程,在页面上定义执行点“AJAX 回调”:
名称:get_job

DECLARE
   l_job emp.job%TYPE;
BEGIN
   SELECT job
   INTO l_job
   FROM emp
   WHERE ename = apex_application.g_x01;

   htp.p(l_job);
EXCEPTION WHEN no_data_found THEN
   htp.p('');
END;

请记住,在此过程中处理错误和返回取决于您!确保捕获常见错误,例如no_data_found和/或too_many_rows. 如果它们发生并且没有被捕获,那么您很可能会遇到 javascript 错误,因为您的 javascript 回调代码无法处理错误(在 apex 中将是包含错误消息的整页 html)。
此外,如您所见,我正在使用该x01变量,它是 apex 中的 10 个全局临时变量之一。这样就不需要使用页面项目并将值提交给它的会话状态。

如果您想将此代码放入动态操作中,您可以。如果您选择动态操作,请选择“更改”作为事件和 jQuery 选择器,并选择执行 JavaScript 代码作为真正的操作。然后,您可以将功能代码放在那里。除了$(this)需要$(this.triggeringElement)

于 2013-01-22T11:36:35.017 回答