Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Oracle ApEx复选框,用于在选中/取消选中时操纵其他值_Javascript_Sql_Checkbox_Oracle11g_Oracle Apex - Fatal编程技术网

Javascript Oracle ApEx复选框,用于在选中/取消选中时操纵其他值

Javascript Oracle ApEx复选框,用于在选中/取消选中时操纵其他值,javascript,sql,checkbox,oracle11g,oracle-apex,Javascript,Sql,Checkbox,Oracle11g,Oracle Apex,首先,我使用的是最新版本的Oracle ApEx 4.1.1,下面的标准报告中有一个复选框,因此单击时,我想用sysdate设置另一个字段,包括时间 未选中时,是否希望将我在上一条语句中设置的日期以及注释字段重置为空 报告可能如下所示: select id, name, telephone, apex_item.checkbox2(10,id) as "Tick when Contacted", apex_item.display_and_

首先,我使用的是最新版本的Oracle ApEx 4.1.1,下面的标准报告中有一个复选框,因此单击时,我想用sysdate设置另一个字段,包括时间

未选中时,是否希望将我在上一条语句中设置的日期以及注释字段重置为空

报告可能如下所示:

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

我应该如何处理这个问题?以上是通过动态操作还是直接通过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选择器:
。选中\u select
(这是我们添加到sql中复选框中的类)
条件:JavaScript表达式
$(this.triggeringElement).prop('checked')

该条件是对checkbox元素的检查,以查看它是否已被选中。prop()测试元素的属性,在本例中返回true或false。当为真时,将触发真实动作,否则将触发错误动作

真正的行动:
操作:执行JavaScript代码
Code$(this.triggeringElement).closest(“tr”).find(“td[headers='EMPNAME']input”).val(“test”)

错误操作:
操作:执行JavaScript代码
Code$(this.triggeringElement).closest(“tr”).find(“td[headers='EMPNAME']input”).val(“”)

这两种方法都没有选择类型,因为我们需要针对与单击的复选框所在行相同的项目。没有一种方法可以通过顶点选择的可能性来实现这一点。通过标题指向列,不要忘记指向td内部的输入(或:
textarea
!)

创建动态动作后,返回。在高级下,将事件范围更改为
实时
。这对于分页是必需的。如果不更改此项,则分页后不会将任何操作绑定到元素

然后编辑true和false操作,并取消选中页面加载时激发的

现在说明您的日期:
由于您希望sysdate作为默认值,我建议在页面中添加一个隐藏项,例如P9_DEF_DATE。作为,使用PLSQL表达式,并使用
SYSDATE

然后可以将该字段的值用作默认值,例如:

$(this.triggeringElement).closest("tr").find("td[headers='EMPNAME'] input").val($v('P9_DEF_DATE'));
最后一个注意事项:通过val将值清空:使用
val(“”)
单引号!根据我的经验,我不会和double一起工作

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

  • oracle示例(演示如何在动态操作中使用plsql块):
  • 迪米特里·吉利斯(一些基础知识):
  • Dan McGhan的Youtube教程:
  • 当然,网络上总是有很多东西可以找到,但不要这样做 忘记OTN论坛吧
ajax流程的示例:
假设我想更新我检查过的员工的COMM列

在报告页面上创建一个新流程,给它一个足够简单的名称,不要在其中加空格。例如,我正在运行“update_emp”

将另一个true操作添加到动态操作中,键入“执行JavaScript代码”

此javascript将发布到页面,以
更新\u emp
过程为目标
x01
x02
是一种“临时”变量。它们是存在的,因此我们不必一直提交页面项以便将值发布到会话状态。它们是apex_应用程序包的一部分。
因此,这里我使用
x01
存储empno(复选框的值,因此
this.triggeringElement
),并
x02
为佣金传递值。我在这里硬编码,但是你可以得到你想要的任何值

$.post
是发布到页面的jQuery方法

在学习动态动作或拖网论坛时,您可能会遇到另一种方法来发布到页面,即
htmldb\u Get
,这是apex javascript文件中内置的。我之所以不使用它,是因为它不是真正的Ajax(异步),而是Sjax(同步),而且在我看来不够透明。我相信有一些
GetAsync
是它的一部分,这是很好的,但在任何例子中,你几乎看不到它的使用。现在
get.get()看起来很简单,您可以在3行代码中获得相同的结果,而不是我的JS片段,认为实现真正的Ajax调用是一个很好的实践。有时,您可能会等待太多时间来完成一个过程,并意识到应用程序中所有的
htmldb\u Get
调用并不像您想象的那样有趣

使用此报告设置,情况也更复杂。对于页面项,您可以采取另一种方法:不执行javascript块,而是执行plsql代码块。在那里,您可以指定要提交到会话状态的项(以便它们可以在plsql块中使用)以及要由该plsql块设置其值的项。(sql块在服务器端运行,这意味着引用的项需要在
update emp
set comm = apex_application.g_x02
where empno = apex_application.g_x01;
$.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*/
        }
        );