我的Oracle Apex应用程序中有一个带有description, previous_value, unit_price
字段的表格形式。
我需要使用previous_value
字段中的数据填充description
字段的值。我有一个查询来从数据库中获取previous_value
字段的值。我需要将onChange
个事件添加到description
字段。对于description
字段中的更改,应使用我的查询填充previous_value
字段的值。
我怎么能这样做?
答案 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)