数字辅助

数字辅助管理包含 JSF 数字字符串的输入字段的键盘和鼠标交互。

这些对象由输入辅助行为创建,因此不适用于公共用途,即,您无法构造这些对象并进行使用。

以下描述概括了在数字辅助适用于包含数字字符串的输入字段时,如何处理击键、鼠标和剪贴板交互。

失去焦点/获得焦点交互

当该字段获得焦点时,值将变换为“输入格式”,随后被强制转换为正确的值并使用提示字符替换前导零和结尾零,完成上述操作后,会显示结果并且将光标定位在小数点(或暗含的小数点)的前面。

数字的“输入格式”根据数字的格式而构造。本质上,模式中所有不是 # 或 0 的字符将被视为字面值,而所有 # 和 0 字符将被标记为可输入的位置。需要时可以保留千位分隔符,即,在除去前导零时保留千位分隔符。值将转换为输入格式,并强制转换为正确的值。强制转换会将值强制在范围之内,并且如果在转换器中未将精确性设置为 2,则将值强制为非 NULL 值,否则,值将保留为 NULL 值。

例如,如果数字格式为 $ #,##0.00;($ #,##0.00) 并且值为 -1,则当提示字符为 * 时,结果将变成 ($ *,**1.**)。

当该字段失去焦点时,将从该字段中除去提示字符,值将强制转换为正确的值,因此在 onblur 之后,此值始终是“正确的”,然后,将使用值的原始格式对其重新进行格式化。onBlur 中的“强制转换”与 onfocus 中的强制转换相同。注意,提示字符在除去后将被替换为 0,但如果启用了填充功能,则它们将被替换为填充字符。

击键交互

当按下数字键(即,生成 keypress 事件)时,行为就相当复杂,具体情况取决于光标是在小数点左边还是在小数点右边。基本上是在小数点左边通过“插入方式”来处理输入,即,将字符插入在光标位置,而左边的数字将左移一个位置。在小数点右边,光标处于叠印方式并替换右边的字符。目标是用户可以在空字段中输入“123.45”,且初始时光标位于小数点位置,并且输入正确的值。如果输入字面值字符,例如,小数点和千位分隔符,则将“跳跃”到下一个此类字符。如果在值的左边输入,则从光标位置到值的第一个有效数字之间将填零。在任何情况下,如果按下了无效的键,则“什么都不会发生”。如果由于输入了太多的数字而导致数字会“溢出”,则在输入多余的字符时,“什么都不会发生”。

因为数字模式未描述哪些字符是数字中的实际“符号”字符,而模式中的多个字符(例如,前导括号和结尾括号)可用于指明值带符号,所以在数字中的任何位置按加号键或减号键都会切换该数字的正负号。如果删除了值的部分或整个值,则将对符号进行特殊处理。接下来的目标是在一个为空的数字字段位置中正确输入 -100.00 这样的数字。

当按下控制键,即,使用键控代码中指明的控制键生成了 keydown 事件时,数字助理将处理 keydown 事件上的控制键,这是 Windows® 中的标准。如果控制键是右箭头键或左箭头键,则光标将前进/倒退到字符串中可以进行输入的下一位置。如果按下了 Del 键,则将删除光标位置后面的字符,如果存在所选内容,则删除所选内容,并且光标会前进到下一位置。如果按下了 Backspace 键,则将删除光标位置前面的字符,并且光标会向后移。如果删除包含小数点的所选项,则将需要特殊处理以便对值进行调整,通常,光标会刚好放在小数点前面。如果按下了 Tab 或 Enter 键,则将执行正常形式的处理操作。不会对任何其他控制键进行特殊处理,例如,不会对 HOME 和 END 键进行特殊处理,它们会按预期方式进行工作。

口头表示的客户需求要求在用户输入(添加或除去一个或多个字符)时,根据需要自动添加/除去千位分隔符。

鼠标交互

如果用户单击字段且并非是要进行选择,则光标将定位在用户可能输入的“下一个”字符之前。

剪贴板交互

仅 IE 可以处理剪切/复制/粘贴交互,Mozilla 不支持此类交互,而且在 IE 中只提供有限支持。虽然 IE 为管理交互提供了完整的事件集,但 IE 对剪贴板仅具有有限的访问权,因此限制了可以完成的操作。

“复制”将所选内容原样复制到剪贴板。“剪切”完成相同的操作,不过它会清除所选内容,即将所有输入位置设为空。在粘贴时,如果剪贴板上的值似乎为数字字符串,则仅粘贴“输入”字符(非字面值)字符,否则将粘贴整个字符串。粘贴会将字符仅应用于“输入”位置而跳过字面值。如果有任何字符未通过输入验证,则将取消整个粘贴,否则光标将被放在所粘贴字符的末尾,虽然有时浏览器随后会移动光标位置。

局限性


反馈