Oracle10g 用另一个字段的更改填充表格表单字段值

Oracle10g 用另一个字段的更改填充表格表单字段值,oracle10g,oracle11g,oracle-apex,tabular-form,Oracle10g,Oracle11g,Oracle Apex,Tabular Form,在我的Oracle Apex应用程序中,有一个带有说明、上一个\u值、单价字段的表格 我需要用description字段上的数据填充previous\u value字段的值。我有一个查询,可以从数据库中获取previous\u value字段的值。我需要将onChange事件添加到description字段。随着description字段的更改,应使用我的查询填充previous\u value字段的值 我如何才能做到这一点?您可以通过多种方式将更改事件绑定到字段。目标通过td报头, 或者编辑列

在我的Oracle Apex应用程序中,有一个带有
说明、上一个\u值、单价
字段的表格

我需要用
description
字段上的数据填充
previous\u value
字段的值。我有一个查询,可以从数据库中获取
previous\u value
字段的值。我需要将
onChange
事件添加到
description
字段。随着
description
字段的更改,应使用我的查询填充
previous\u value
字段的值


我如何才能做到这一点?

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

使用此应用程序进程,在执行点为“AJAX回调”的页面上定义:
姓名:找工作

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;
请记住,在此过程中处理错误和返回取决于您!确保捕获常见错误,例如
未找到任何数据
和/或
行太多
。如果这些错误发生且未被捕获,您将很有可能遇到javascript错误,因为您的javascript回调代码无法处理该错误(在apex中,该错误将是一个包含错误消息的整页html)。
另外,正如您所看到的,我正在使用
x01
变量,它是apex中10个全局临时变量之一。这样,就不需要使用页面项并将其值提交到会话状态


如果您想将此代码置于动态操作中,您可以。如果要执行动态操作,请选择“更改”作为事件和jQuery选择器,选择“执行javascript代码”作为真正的操作。然后,您可以将函数代码放入其中。除了
$(this)
需要是
$(this.triggeringElement)

说明
我的表格形式中的列是
自动完成
。它还可以使用ajax调用。当我从“自动完成”列表中选择“描述”时,这不起作用。如果我没有从“自动完成”列表中选择而编写完整的描述,这就是工作。我如何解决这个问题?您有什么自动完成功能?jQuery的?如果是,您是否有一些绑定到自动完成事件的内容可以取消某些内容?更改事件应该只针对自动完成项触发,我只是亲自尝试了一下,同时使用了自动完成项的更改事件和绑定到该项的更改事件。jQuery one with Ajax回调此代码。从下载我一开始看不出有什么问题。我想你是用一个动态动作来绑定变更事件的吧?从“自动完成”下拉列表中选择项目后,它不会激发,但在不拾取时会激发?您确定并且尝试过使用alert/console.log行吗?如果一切正常,是否可以尝试更改自动完成的焦点选项:
focus:function(event,ui){event.preventDefault();}
而不是返回false?也可以为更改事件添加一个函数,只是为了调试:
change:function(){alert(“autocomp change”);}
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;