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 Selector
jQuery 选择器:.check_select(这是我们在 sql 中的复选框中添加的类)
条件:JavaScript 表达式
值:@ 987654326@
条件是检查复选框元素以查看它是已选中还是未选中。 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('') 和 SINGLE 引号!根据我的经验,不会与 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 调用,并提供了一种很好的方式来查看它。