跟踪行为

跟踪表单中上次使用的字段,并且在提交表单时将该字段的 ID 传递给服务器。此行为在提交表单前跟踪最后带有焦点的字段。
注: 此行为的作用域受限制。仅当页面上只有基于 hxclient 库的组件时,此行为才能正常工作。如果页面上有诸如选项卡式面板或树型控件之类的 ODC 组件,则此行为可能无法正常工作。如果设计者编码了诸如 focus() JavaScript™ 调用之类的“手工”事件触发,则此行为无法正常工作。由于存在这些限制,因此,只能在诸如由 iSeries™ 发出的页面等页面内容受严格控制的页面中使用此行为。

在提交表单前,跟踪表单中带有焦点的字段,这不包括可能存在的用于提交表单的按钮。

此行为没有任何属性。而是,此行为在表单中查找具有特殊名称的隐藏字段。如果在表单中找到 ID 为 form-id:POST_LASTFIELD(其中,form-id 是表单标识)的字段,则将使用此隐藏字段将带焦点字段的标识传递回给服务器。如果在表单中找到 ID 为 form-id:POST_LASTCURSOR 的字段,则将使用此隐藏字段将该字段中的光标位置传递回给服务器。如果该字段不支持选择,则光标位置为 -1;否则,这是该字段中紧跟在文本光标后面的字符位置并基于零。例如,如果返回零,则表示光标在该字段中第一个字符前面。

此行为跟踪表单中发生的焦点事件,根据需要还将跟踪按键和鼠标事件。当直接从 JavaScript 中生成事件时,浏览器不会生成诸如焦点和单击之类的事件。例如,如果在页面中执行 Javascript obj.focus() 调用,则不会生成事件。在这种情况下,由于不生成事件,所以此行为不知道某个字段是否已获得焦点或者光标是否已移动。在这种情况下,由于基于 hxclient 的组件和行为使用公共焦点管理例程,因此所有这些组件和行为都能正确地跟踪焦点,但任何不基于 hxclient 的 Javascript 在设置焦点或光标后将无法正常工作。由于基于 ODC 的组件不基于 hxclient,所以可能无法正常工作。页面中的定制 JavaScript 也可能无法正常工作。

发送组件的 JSF 标记

无。行为由 iSeries JSF 扩展使用。

基本 HTML

必须与 <form> 标记连接。

<input type="hidden" disabled="true" id="form-id:POST_LASTFIELD">
<input type="hidden" disabled="true" id="form-id:POST_LASTCURSOR">

JavaScript 构造函数

hX_5.addBehavior("id", "oninput", new hX_5.JSFBehaviorTrack()); 其中

id

组件所连接至的 HTML 标记的 ID。

受支持的事件

事件

描述

oninput

注意特殊事件名称的用法。该行为修改了所有键盘事件处理程序以及获得焦点和失去焦点处理程序。

序列

在为该事件提供的任何其他处理程序运行完成后运行。不会停止该事件。

API 调用

表 1. 跟踪行为 API 调用

API 调用

描述

object = setAttribute(attribute)

设置属性,或如果以前已设置属性,则更改其值。

string = getAttribute(attribute-name)

检索属性的当前值。

局限性

示例代码

设置表单,以返回有关该表单中最后带有焦点的字段的焦点/光标信息。

<form id="form1">
	<input type="text" id="form1:text1" /><br>
	<input type="text" id="form1:text2" /><br>
	<select id="form1:menu1" name="form0:menu1" class="selectOneMenu" size="1">	
		<option value="Value0">One</option>
		<option value="Value1">Two</option>
		<option value="Value2">Three</option>
	</select>
	<input type="submit" value="Submit" id="form01:button1" name="form1:button1" />

	<input type="hidden" id="form1:POST_LASTFIELD" />	
	<input type="hidden" id="form1:POST_LASTCURSOR" />	
</form>
<script>
hX.addBehavior("form1", "oninput", new hX.JSFBehaviorTrack());
hX.onPageLoad();
</script>

反馈