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。当为真时,将触发一个真动作,否则将触发一个假动作。
真正的行动:
行动:执行 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
!)
创建动态操作后,返回。在Advanced下将Event Scope更改为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('')
与单引号一起使用!根据我的经验,不会与 double 一起使用。
动态操作文档的一些链接:
ajax 进程的一个示例:
假设我想更新我检查的员工的 COMM 列。
在报告页面上创建一个新流程,给它一个足够简单的名称,并且不要在其中添加空格。例如,我正在使用“update_emp”运行。
update emp
set comm = apex_application.g_x02
where empno = apex_application.g_x01;
向动态操作添加另一个真实操作,键入“执行 JavaScript 代码”。
$.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
传递佣金的值。我在这里对其进行了硬编码,但您当然可以获得任何您想要的值。
$.post
是一个发布到页面的 jQuery 方法。
当您学习动态操作或拖网论坛时,您可能会遇到另一种发布到页面的方法,即htmldb_Get
,这是内置在 apex javascript 文件中的。我不使用它是因为它不是真正的 Ajax(异步),而是 Sjax(同步),而且在我看来不够透明。我相信它的某些GetAsync
部分,这很好,但你几乎看不到它在任何示例中使用。现在get.get();
看起来很简单,你可以用 3 行代码而不是我的一段 js 来实现相同的结果,认为实现真正的 ajax 调用是一个好习惯。您有时可能会等待完成一个过程太多,并意识到htmldb_Get
您的应用程序中的所有这些调用并不像您想象的那么有趣......
此报告设置也使事情变得更加复杂。对于页面项目,您可以采用另一条路线:您可以执行 plsql 代码块,而不是执行 javascript 块。在那里,您可以指定要提交到会话状态的项目(以便它们可以在 plsql 块中使用)和项目的值由该 plsql 块设置。(sql 块在服务器端运行,这意味着引用的项目需要在会话状态下具有它们的值)。我建议也玩一下。
话虽如此,您也可以使用报告操作来执行此操作,但是您需要设置一些虚假项目来临时保存可以提交到会话状态的值。再说一次,我不喜欢那个,所以我没有去(另一个'imo'因此)。
本质上,打开浏览器检查工具,例如 firebug。它允许您检查在页面上进行的 ajax 调用,并提供了一种很好的方法来查看它。