代码之家  ›  专栏  ›  技术社区  ›  Jason Bourne

为选择列表页项目的背景着色

  •  0
  • Jason Bourne  · 技术社区  · 1 年前

    我目前正试图在OracleApex中创建一个表单,其中表单条目(所有选择列表)会根据条目所包含的数据更改颜色。到目前为止,我有一个动态动作,它在页面加载时触发,执行以下JS代码:

    const pageItems = ["P60_C011", "P60_C012", ....., "P60_C049", "P60_C050"]
    
    for (let i = 0; i < pageItems.length; i++){
        if ($v(pageItems[i]) == "Yes"){
            $("#" + pageItems[i]).css("background-color", "#90EE90");
        }
    
        else if ($v(pageItems[i]) == "No" || $v(pageItems[i]) == "N/A" || $v(pageItems[i]) == "In Progress"){
            $("#" + pageItems[i]).css("background-color", "#F08080");
        }
    
        else if ($v(pageItems[i]) == "") {
            $("#" + pageItems[i]).css("background-color", "transparent");
        }
    }

    除了一些小众的互动之外,这非常有效。首先,文本前和文本后的背景颜色保持不变(它们在页面项目的模板选项中显示为块)。但更重要的是,无论何时单击项目(通过选择列表更改其值),颜色都会返回到默认值。我真的希望颜色保持不变,无论动态动作要求它是什么。

    此外,如果页面项中包含的值发生了更改,但尚未提交到表单的相应表中,我希望背景颜色完全不同。我对此有一些想法,但它们似乎都非常乏味,并且涉及40个条目中每个条目的单独动态操作或代码块,如果能提供更简单的解决方案,我将不胜感激。

    0 回复  |  直到 1 年前
        1
  •  0
  •   Koen Lostrie    1 年前

    我不会对此使用动态操作。相反,在页面加载时定义一个函数,并使用jquery委托绑定来捕获任何更改:

    函数和全局变量声明:

    function colorSelectLists(){
        const pageItems = ["P185_C1","P185_C2"]
        
        for (let i = 0; i < pageItems.length; i++){
            if ($v(pageItems[i]) == "Y"){
                $("#" + pageItems[i]).css("background-color", "#90EE90");
            }
        
            else if ($v(pageItems[i]) == "N" || $v(pageItems[i]) == "N/A" || $v(pageItems[i]) == "In Progress"){
                $("#" + pageItems[i]).css("background-color", "#F08080");
            }
        
            else if ($v(pageItems[i]) == "") {
                $("#" + pageItems[i]).css("background-color", "transparent");
            }
        }    
    }
    

    页面加载时执行

    //initial load
    colorSelectLists();
    //listener for any changes to adjust the color
    $('#P185_C1, #P185_C2').on('change',function(){
        colorSelectLists();
    });
    

    请注意,jquery选择器需要与单引号中以逗号分隔的id列表完全匹配。