使用另一个字段的更改填充表格形式字段值

时间:2013-01-21 11:18:21

标签: oracle10g oracle11g oracle-apex tabular-form

我的Oracle Apex应用程序中有一个带有description, previous_value, unit_price字段的表格形式。

我需要使用previous_value字段中的数据填充description字段的值。我有一个查询来从数据库中获取previous_value字段的值。我需要将onChange个事件添加到description字段。对于description字段中的更改,应使用我的查询填充previous_value字段的值。

我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

您可以通过多种方式将change事件绑定到字段。通过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);
});

OR

$('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 Callback”:
名称: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变量,该变量是顶点中的10个全局临时变量之一。这样就不需要使用页面项并将值提交给会话状态。

如果您想将此代码置于动态操作中,则可以。如果您选择动态操作,请选择“更改”作为事件和jQuery选择器,并选择执行javascript代码。然后,您可以将功能代码放在那里。但$(this)必须为$(this.triggeringElement)