【问题标题】:making my tabular form dynamic使我的表格形式动态化
【发布时间】:2016-11-16 16:59:39
【问题描述】:

我在表格形式上有一个复选框。如果未填写提交日期,我需要能够隐藏它并在有日期时显示它。单击复选框后,我需要根据单击的复选框或单击更新按钮时更新另一个字段。这在 4.2 版的 Oracle Apex 表格形式上可行吗?

【问题讨论】:

    标签: oracle oracle-apex


    【解决方案1】:

    您可以在表格表单字段上创建动态操作,但您需要了解一些 Javascript / jQuery / DOM 的东西,因为它不能像使用页面项目那样以声明方式完成。

    例如,我在 EMP 表上创建了一个简单的表格形式:

    使用浏览器的 Inspect Element 工具,我可以看到第 3 行的 Ename 字段的 HTML 如下所示:

    <input type="text" name="f03" size="12" maxlength="2000" value="Ben Dev"
        class="u-TF-item u-TF-item--text " id="f03_0003" autocomplete="off">
    

    需要注意的相关位是名称“f03”和ID“f03_0003”。对于所有表格字段,名称表示列,并且对于该列中的所有字段都是相同的。 ID 由名称加上表示行的字符串组成 - 在本例中,“_0003”表示第 3 行。

    同样,Hiredate 字段都被命名为“f004”,并且具有类似“f04_0003”的 ID。

    有了这些信息,我们可以编写一个动态动作。例如,假设只要 Ename 为空,则应隐藏 Hiredate,否则显示。在伪代码中:

    每当更改名为“f03”的元素时,应隐藏或显示同一行中名为“f04”的元素。

    所以我们可以创建一个带有 When 条件的联动动作,如下所示:

    • 事件 = 改变
    • 选择类型 = jQuery 选择器
    • jQuery 选择器 = 输入[name="f03"]

    即每当更改名称为“f03”的输入时,触发此操作。

    执行的操作必须是“执行 Javascript 代码”,代码可以是:

    // Get the ID of this item e.g. f03_0004
    var this_id = $(this.triggeringElement).attr('id');
    // Derive the ID of the corresponding Hiredate item e.g. f04_0004
    var that_id = 'f04'+this_id.substr(3);
    
    if ($(this.triggeringElement).val() == "") {
        // Ename is empty so hide Hiredate
        $('#'+that_id).closest('span').hide();
    } else {
        // Ename is not empty so show Hiredate
        $('#'+that_id).closest('span').show();
    }
    

    因为 Hiredate 是一个日期选择器,所以我需要隐藏/显示字段本身及其日期选择器图标。我选择通过隐藏/显示包含它们的跨度来做到这一点。这段代码可以用多种不同的方式编写。

    您可以应用类似的技术来实现您的目标,但正如您所见,这并非易事。

    【讨论】:

    • 这不起作用。我把变量放进去,什么都没有发生。如果提交日期为空,那么我想隐藏两个字段,如果不是,那么我想显示这些字段。我究竟做错了什么?请帮忙。
    • @DarrellLawrence 很难说没有看到您的 APEX 页面和代码。
    • Tony.. 我是新手,如何向您展示我的顶点页面和动态操作代码?我基本上复制并粘贴了上面的 javascript 代码并将其替换为我的代码 f01 和 f02。
    • 如果您可以在 apex.oracle.com 上设置您的应用程序和页面(或其缩减版本),那么我们可以通过查看页面源代码来查看 HTML 和 Javascript,
    • 我在 apex.oracle.com 上创建了一个工作区。工作区是卫斯理。用户名是 dlawrence@wesleyan.edu,密码是 tester。因此,当租用 dt 为空时,我想隐藏之后的所有列,而当它不是时,我想在租用日期之后显示所有列。如果您可以在动态 sql 中添加代码,那就太好了。我们在 apex 4.2 上,所以我对第 5 版有点迷茫,因为它看起来有点不同。
    猜你喜欢
    • 2012-10-19
    • 1970-01-01
    • 2016-04-21
    • 2016-03-15
    • 2013-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多