You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle APEX中禁用页面项提交页面时值未提交问题

问题原因

这是HTML的原生行为:表单提交时,浏览器不会发送处于disabled状态的表单元素的值,和Oracle APEX本身无关。即使页面上选择列表的选中值视觉显示正常,只要元素标记为disabled,其值就不会被包含在提交的表单数据中,导致后端PL/SQL无法获取到该值。

解决方法

以下三种方案可确保禁用状态下的页面项值能被提交到服务器:

方案1:用readonly替代disabled(推荐)

readonly属性的元素用户无法编辑,但值会被正常提交。只需修改JavaScript逻辑,并添加CSS模拟禁用的视觉效果:

修改后的JavaScript代码:

$(document).ready(function(){
    $('input[name="P2_ACTION"]').change(function(){
        const $reissue = $('#P2_REISSUE');
        if($(this).val() === "VR"){
            $reissue.prop('readonly', false).removeClass('apex-disabled-style');
        } else {
            $reissue.prop('readonly', true).addClass('apex-disabled-style');
        }
    });
});

添加CSS样式(可在页面内联CSS或主题CSS中配置):

.apex-disabled-style {
    background-color: #eeeeee;
    cursor: not-allowed;
    opacity: 0.6;
}

此方案无需修改后端PL/SQL逻辑,直接使用原页面项P2_REISSUE的值即可。

方案2:同步值到隐藏字段

保留原disabled逻辑,同时新增一个隐藏页面项同步选择列表的值,后端读取隐藏字段的值:

  1. 在APEX页面创建隐藏项P2_REISSUE_HIDDEN,其数据类型、来源与P2_REISSUE保持一致。
  2. 修改JavaScript代码实现值同步:
$(document).ready(function(){
    const $reissue = $('#P2_REISSUE');
    const $hidden = $('#P2_REISSUE_HIDDEN');
    
    // 初始化同步值
    $hidden.val($reissue.val());
    
    $('input[name="P2_ACTION"]').change(function(){
        if($(this).val() === "VR"){
            $reissue.prop('disabled', false);
        } else {
            $reissue.prop('disabled', true);
        }
        // 同步值到隐藏字段
        $hidden.val($reissue.val());
    });
    
    // 监听选择列表值变化,实时同步
    $reissue.change(function(){
        $hidden.val($(this).val());
    });
});
  1. 后端PL/SQL逻辑中,将原引用:P2_REISSUE改为:P2_REISSUE_HIDDEN。

方案3:提交前临时启用元素

利用APEX的页面提交事件,在提交前临时启用禁用的元素,提交完成后恢复状态:

$(document).ready(function(){
    const $action = $('input[name="P2_ACTION"]');
    const $reissue = $('#P2_REISSUE');
    
    $action.change(function(){
        if($(this).val() === "VR"){
            $reissue.prop('disabled', false);
        } else {
            $reissue.prop('disabled', true);
        }
    });
    
    // 页面提交前临时启用元素
    apex.event.subscribe("apexbeforepagesubmit", function(){
        $reissue.prop('disabled', false);
    });
    
    // 提交完成后恢复禁用状态(可选,根据页面交互需求)
    apex.event.subscribe("apexafterpagesubmit", function(){
        if($action.filter(':checked').val() !== "VR"){
            $reissue.prop('disabled', true);
        }
    });
});

此方案无需修改后端逻辑,提交时浏览器会发送原页面项的值。

内容的提问来源于stack exchange,提问作者Henriquez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 04:17:04