gpt4 book ai didi

javascript - Oracle ApEx复选框可在选中/未选中时操纵其他值

转载 作者:行者123 更新时间:2023-12-03 16:29:44 26 4
gpt4 key购买 nike

首先,我使用的是最新版本的Oracle ApEx 4.1.1,并且具有以下具有复选框选择的标准报告,因此在单击时希望使用sysdate设置另一个字段,包括时间。

取消选中时,想将我之前的语句以及注释字段中设置的日期重置为NULL。

报告可能如下所示:

select id,
name,
telephone,
apex_item.checkbox2(10,id) as "Tick when Contacted",
apex_item.display_and_save(20,:P2_DATE) as "Date Contacted",
apex_item.textarea(30,:P2_COMMENT,5,80) as "Comment"
from my_table

作为上述报告的示例,总共可能有10条记录,因此,由于用户选中了10条记录复选框中的每一个,因此我想当场将日期字段设置为sysdate。当复选框未选中时,我也想反向完成-将日期和注释都设置为NULL。

我应该如何处理?是否可以通过动态 Action 或通过JavaScript /按需流程直接实现以上目的?

如果可能的话,绝对会选择“动态操作”方法,以便学习执行所需任务的新方法。

最佳答案

EMP表上的示例:

select 
apex_item.checkbox2(p_idx => 1, p_value => empno, p_attributes => 'class="check_select"') empselection,
apex_item.text(2, ename) empname,
empno,
ename
from emp

将一个类添加到复选框项。这使得使用jQuery轻松定位成为可能。

创建一个新的动态操作,例如“复选框单击”。
事件:单击
选择类型:jQuery选择器
jQuery 选择器: .check_select(这是我们添加到sql中复选框的类)
条件:JavaScript表达式
: $(this.triggeringElement).prop('checked')
条件是选中复选框元素以查看其是否已选中。 prop()测试元素的属性,在这种情况下返回true或false。如果为true,则将触发真实 Action ,否则将触发错误 Action 。

实际操作:
操作:执行JavaScript代码
代码: $(this.triggeringElement).closest("tr").find("td[headers='EMPNAME'] input").val('test');
错误操作:
操作:执行JavaScript代码
代码: $(this.triggeringElement).closest("tr").find("td[headers='EMPNAME'] input").val('');
两者都没有选择类型,因为我们需要将目标项目定位在与单击复选框相同的行中。根本没有办法通过顶点选择可能性做到这一点。通过标题将列作为目标,不要忘记将目标作为td内部的输入(或: textarea!)

创建动态 Action 后,请返回。在 高级下,将 事件范围更改为 Live。这是解决分页所必需的。如果您不更改此设置,则分页后不会将任何操作绑定(bind)到元素。

然后编辑正确和错误操作,然后 取消选中 Fire on Page Load

现在考虑您的日期:
由于您希望sysdate为默认值,因此建议您向页面添加一个隐藏项目,例如P9_DEF_DATE。作为 ,请使用 PLSQL表达式,并使用 SYSDATE
然后,您可以将该字段的值用作默认值,例如:
$(this.triggeringElement).closest("tr").find("td[headers='EMPNAME'] input").val($v('P9_DEF_DATE'));

最后说明:通过val消除值:将 val('')一起使用单引号引号!根据我的经验,这不会起作用。

动态操作文档的一些链接:

oracle的
  • 示例(显示如何在动态操作中使用plsql块):
    http://st-curriculum.oracle.com/obe/db/apex/r40/apexdynactions/apexdynactions_ll.htm
  • Dimitri Gielis(一些基本知识):
    http://dgielis.blogspot.be/search/label/Dynamic%20Actions
  • Dan McGhan的
  • Youtube教程:
    http://www.youtube.com/watch?v=9JAKMU8x5nI
  • 当然,网上总是可以找到很多东西,不要
    忘记OTN论坛。

  • 一个ajax流程的示例:
    假设我要更新我检查过的员工的COMM列。

    在报告页面上创建一个新流程,为其命名足够简单,并且不要在其中添加空格。例如,我正在运行“update_emp”。
    update emp
    set comm = apex_application.g_x02
    where empno = apex_application.g_x01;

    向动态 Action 中添加另一个true Action ,键入“Execute JavaScript Code”。
    $.post('wwv_flow.show', 
    {"p_request" : 'APPLICATION_PROCESS=update_emp',
    "p_flow_id" : $v('pFlowId'), //app id
    "p_flow_step_id" : $v('pFlowStepId'), //page id
    "p_instance" : $v('pInstance'), //session id
    "x01" : $(this.triggeringElement).val(),
    "x02" : '88', //just a bogus value to demonstrate
    },
    function(data){
    /*normally you'd handle the returned value here
    an example would be a JSON return with which to set item values*/
    }
    );

    此javascript将发布到页面上,以 update_emp过程为目标。 x01x02是一种“临时”变量。它们存在,因此我们不必一直提交页面项目即可将值发布到 session 状态。它们是apex_application软件包的一部分。
    因此,这里我使用 x01存储empno(复选框的值,因此是 this.triggeringElement),并使用 x02传递用于commision的值。我在这里进行了硬编码,但是您当然可以得到任何值(value)。
    $.post是发布到页面的jQuery方法。

    当您学习动态操作或浏览论坛时,可能会遇到另一种方法发布到页面上,即 htmldb_Get,该方法内置在apex javascript文件中。我不使用它,因为它不是真正的Ajax(异步),而是Sjax(同步),并且在我看来不够透明 。我相信其中有一些GetAsync部分,这很不错,所有方面,但是您几乎不会在任何示例中看到它。现在get.get();看起来很简单,您可以用3行代码(而不是我的js)实现相同的结果,认为这是实现真正的ajax调用的好习惯。您可能不时地等待完成一个过程,并意识到应用程序中的所有htmldb_Get调用并不像您认为的那样有趣。

    使用此报告设置,事情也变得更加复杂。使用页面项目,您可以采取另一种方法:可以执行plsql代码块来代替执行javascript块。在这里,您可以指定要提交到 session 状态的项目(以便可以在plsql块中使用它们),并指定要通过此plsql块设置其值的项目。 (sql块在服务器端运行,这意味着引用的项需要在 session 状态中具有其值)。我建议也玩这个。
    话虽如此,您也可以使用报告操作来执行此操作,但是您需要设置一些假项目来临时保存值,然后将其提交到 session 状态。再说一次,我不喜欢那个,所以我没有去(那个是另一个“imo”)。

    本质上,打开浏览器检查工具,例如firebug。它使您可以检查在页面上进行的ajax调用,并提供了一种很好的方法来研究此问题。

    关于javascript - Oracle ApEx复选框可在选中/未选中时操纵其他值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12038392/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com