首先,我使用的是最新版本的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。
我应该如何处理?是否可以通过动态动作或通过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时,将触发true动作,否则将触发false动作。
真实操作:
操作 :执行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
!)
创建动态动作后,返回。在“ 高级”下, 将“ 事件作用域”
更改为Live
。这对于解释分页是必要的。如果您不更改此设置,则分页后不会将任何操作绑定到元素。
然后编辑正确和错误操作,然后 取消选中 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('')
与 单 引号!根据我的经验,这不会起作用。
一个ajax流程的示例:
假设我要更新所检查员工的COMM列。
在报表页面上创建一个新流程,为其命名足够简单,并且不要在其中添加空格。例如,我正在运行“ update_emp”。
update emp
set comm = apex_application.g_x02
where empno = apex_application.g_x01;
向动态动作中添加另一个true动作,键入“ 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
过程为目标。x01
并且x02
是一种“临时”的变量。它们存在,因此我们不必一直提交页面项目即可将值发布到会话状态。它们是apex_application程序包的一部分。
所以在这里,我x01
用来存储empno(复选框的值,因此this.triggeringElement
),并x02
传递给Commision的值。我在这里对其进行了硬编码,但是您当然可以得到任何价值。
$.post
是发布到页面的jQuery方法。
当您学习动态操作或在论坛上拖网时,您可能会遇到另一种方法发布到页面上,即htmldb_Get
,该方法内置在apex
javascript文件中。我不使用它,因为它不是真正的Ajax(异步),而是Sjax(同步),并且 在我看来
还不够透明。我相信其中有GetAsync
一部分,这是一件好事,但是,您几乎不会在任何示例中看到它的使用。现在get.get();
看起来很容易,您可以用3行代码(而不是我的js)实现相同的结果,认为这是实现真正的ajax调用的一种好习惯。您可能不时地等待完成一个过程,并意识到htmldb_Get
应用程序中的所有调用并不像您认为的那样有趣。
使用此报告设置,事情也变得更加复杂。使用页面项目,您可以采取另一种方法:可以执行plsql代码块来代替执行javascript块。在这里,您可以指定要提交到会话状态的项目(以便可以在plsql块中使用它们),并指定要由该plsql块设置其值的项目。(sql块在服务器端运行,这意味着引用的项需要在会话状态中具有其值)。我建议也玩这个。
话虽如此,您也可以使用报告操作来执行此操作,但是您需要设置一些假项目来临时保存值,然后将其提交到会话状态。再说一次,我不喜欢那个,所以我没有去(那个是另一个“
imo”)。
本质上,打开浏览器检查工具,例如firebug。它使您可以检查在页面上进行的Ajax调用,并提供了一种很好的方法来研究此问题。
我试图创建一个表单,该表单顶部有一个复选框,当用户选中该复选框时,它会选择其他特定的复选框,但不是所有复选框。我很难通过反复试验或搜索找到答案。我唯一能找到的就是“全选”选项。不是我想要的。 理想情况下,当用户选中“管理包”旁边的复选框时,我想要“Chrome外观组”和“远程启动” 下面是代码和我在这方面的基本尝试,但它不起作用。提前谢谢。 超文本标记语言: Javascript 我不知道这个Ja
我正在尝试一个Woocommerce票证插件。默认情况下,该插件会显示一个表,其中包含多个票证变体作为产品,并在下面显示一个文本字段作为其数量和一个提交按钮,以将产品添加到购物车中。 我想用单选按钮或复选框替换这个文本字段,这样用户就可以选择一种类型的票证,然后点击提交按钮将其中的一部分添加到购物车中。 我的想法是在foreach循环中创建一个复选框或单选按钮,该复选框或单选按钮的值为quanti
我创建了一个windows窗体(到目前为止)只包含复选框。构造函数接受一个参数:。对于这个数组中的每个字符串,我都会创建一个复选框。 例如: null 那么,当另一个复选框调用uncheck时,是否有一种方法可以告诉我的复选框不要运行? 下面是我的代码(它都是手工编写的,所以没有使用visual studio设计器):
选中“第一键”复选框时,我想选中并禁用“第二键”复选框 html代码 为复选框键入脚本代码 } 通过使用此代码,key 2复选框被选中并禁用。但是key 2复选框的布尔值仍然是假的。当我单击key 1复选框时,关于如何将key 2复选框的布尔值更改为true的任何建议我正在使用Angular 8及其反应式形式模块。我是角度新手。
这是我的状态 我试图做的是,每当选中或未选中复选框时,我将相应的复选框设置为true/false。根据每个复选框的这个布尔值,我过滤出,然后在UI上呈现它。当单击复选框时,我能够筛选结果,但当未选中复选框时,我无法显示所有结果。当复选框发生更改时,我就是这样处理的。 我知道我没有正确地处理状态,在这种情况下我能做什么。为了更好地参考,这里是完整的搜索结果代码。
app.py reg_account.html 错误: 我想让的结果在中的复选框未选中时返回False,但我不明白为什么当我勾选了该复选框时,结果可以存储到数据库中?我试着调试了几次,但还是找不到一个可能的解决方案,所以有没有人可以帮忙?