如何在 APEX 5.1 的交互式报告中选中相关复选框时启用 select 列表

How to enable select list when related checkbox is checked in interactive report in APEX 5.1

我在 Oracle APEX 5.1 中创建了一个关于 SQL 查询的交互式报告,并且我添加了另外两列来查询。一个是报告中每一行的复选框,另一个是 select 列表,其中包含每一行的数字。 SQL查询写在下面。我想要做的是在选中相关复选框时启用 select 列表,否则最终用户不应该能够从列表中选择 select 号码。我知道这可以通过动态操作来完成,但我无法指出解决方案。

为什么我要禁用 select 列表:我可以通过 APEX_APPLICATION.G_F01 数组通过 pl/sql 中的 for 循环获得复选框的返回值。在数组内部,有已检查的行,但我无法通过 APEX_APPLICATION.G_F02 达到已检查行的数量,这是 select 列表的值数组,因为该数组还包含不需要的未检查列的数量的价值。我找到了在选中复选框时启用 select 列表的解决方案。

查询:

SELECT  APEX_ITEM.CHECKBOX2(1,URUN.BARKOD) "Select", U.AD, MA.AD MAGAZA_ADI, FIYAT, APEX_ITEM.SELECT_LIST(
        p_idx           =>   2,
        p_list_values   =>   '1;1,2;2,3;3,4;4,5;5,6;6,7;7,8;8,9;9,10;10',
        p_show_null     =>   'YES',
        p_null_value    =>   NULL,
        p_null_text     =>   '-0-',
        p_item_id       =>   'f03_#ROWNUM#',
        p_item_label    =>   'Label for f03_#ROWNUM#') "Adet"
FROM URUNSATIS URUN, UYE UN, ADRES AD, ANLASMALAR AN, MAGAZA MA, URUN U
WHERE UN.USERNAME = :SESSION_USER_NAME AND UN.ID = AD.UYE_ID AND AD.APARTMAN_ID = AN.APARTMAN_ID AND AN.MAGAZA_ID = URUN.MAGAZA_ID AND MA.ID = URUN.MAGAZA_ID AND U.BARKOD=URUN.BARKOD
ORDER BY 1;

这个问题背后的想法:我希望最终用户 select 报告中的产品,当他们 select 所需产品的复选框时,他们应该能够选择他们想要订购的产品数量从市场。我卡在了应用程序的这个阶段。我愿意接受任何解决这个问题的新想法。

您可以使用复选框上的 p_checked_attributes 选项来跟踪通过隐藏项检查了哪些选项,然后根据该值是否包含在隐藏物品。

因此您的 select 查询将如下所示:

SELECT 
    APEX_ITEM.CHECKBOX2(p_idx => 1, 
                        p_value => URON.BARKOD,
                    --    p_attributes => 'class="barkod"', use this value if you want to keep track after refresh
                        p_checked_values => :P1_BARKOD_LIST,
                        p_checked_values_delimiter => ',') AS "SELECT",
    U.AD, MA.AD MAGAZA_ADI, FIYAT, 
    APEX_ITEM.SELECT_LIST(
        p_idx           =>   2,
        p_list_values   =>   '1;1,2;2,3;3,4;4,5;5,6;6,7;7,8;8,9;9,10;10',
        p_show_null     =>   'YES',
        p_null_value    =>   NULL,
        p_null_text     =>   '-0-',
        p_item_id       =>   'f03_#ROWNUM#',
        p_item_label    =>   'Label for f03_#ROWNUM#') "Adet"
FROM URUNSATIS URUN, UYE UN, ADRES AD, ANLASMALAR AN, MAGAZA MA, URUN U
WHERE UN.USERNAME = :SESSION_USER_NAME AND UN.ID = AD.UYE_ID AND AD.APARTMAN_ID = AN.APARTMAN_ID AND AN.MAGAZA_ID = URUN.MAGAZA_ID AND MA.ID = URUN.MAGAZA_ID AND U.BARKOD=URUN.BARKOD
ORDER BY 1;
  1. 将 class 属性添加到您的复选框
  2. 命名您的 select 列表 ID
SELECT  APEX_ITEM.CHECKBOX2(1,URUN.BARKOD,'class=indCheck') "Select", U.AD, MA.AD MAGAZA_ADI, FIYAT, APEX_ITEM.SELECT_LIST(
        p_idx           =>   2,
        p_list_values   =>   '1;1,2;2,3;3,4;4,5;5,6;6,7;7,8;8,9;9,10;10',
        p_show_null     =>   'YES',
        p_null_value    =>   NULL,
        p_null_text     =>   '-0-',
        p_item_id       =>   'indSelect',
        p_item_label    =>   'Label for f03_#ROWNUM#') "Adet"
FROM URUNSATIS URUN, UYE UN, ADRES AD, ANLASMALAR AN, MAGAZA MA, URUN U
WHERE UN.USERNAME = :SESSION_USER_NAME AND UN.ID = AD.UYE_ID AND AD.APARTMAN_ID = AN.APARTMAN_ID AND AN.MAGAZA_ID = URUN.MAGAZA_ID AND

MA.ID = URUN.MAGAZA_ID AND U.BARKOD=URUN.BARKOD ORDER BY 1;

  1. 现在创建一个动态操作,点击您的复选框执行 javascript 代码:

  2. 这里是 javascript 代码

    $(this.triggeringElement).closest('tr').find('td select#indSelect').attr('disabled',false); 如果 ( $(this.triggeringElement).is(':checked') ) $(this.triggeringElement).closest('tr').find('td select#indSelect').attr('disabled',true);