【问题标题】:Populate Tabular form field value with change of another field使用另一个字段的更改填充表格表单字段值
【发布时间】:2013-01-04 10:32:41
【问题描述】:

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

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

我该怎么做?

【问题讨论】:

    标签: oracle10g oracle11g oracle-apex tabular-form


    【解决方案1】:

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

    【讨论】:

    • description 我的表格形式中的列是autocomplete。它也是使用ajax调用。当我从自动完成列表中选择描述时,这不起作用。如果我写完整的描述而不从自动完成列表中选择,这是工作。我该如何解决这个问题?
    • 你有什么样的自动完成功能?一个 jQuery 的?如果是,您是否有与自动完成事件绑定的东西可以取消某些东西?更改事件应该只是为自动完成项目触发,我只是自己尝试了自动完成的更改事件和绑定到项目的更改事件。
    • 带有 Ajax 回调的 jQuery 之一
    • 这是我的代码。从here下载
    • 一开始我看不出有什么问题。我认为您将更改事件与动态操作绑定在一起?从自动完成下拉菜单中选择一个项目后它不会触发,但它不会在不选择时触发?您确定并尝试过使用 alert/console.log 行吗?如果一切正常,您能否尝试更改自动完成的焦点选项:focus: function(event,ui){event.preventDefault();} 而不是返回 false?也许也可以为更改事件添加一个函数,只是为了调试:change: function(){ alert("autocomp change");}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多