Page 55 - JavaScript修炼之道
P. 55

44       第四部分  表单技巧


             任务 19  提供输入长度反馈


                 填写表单时经常遇到的令人沮丧的事就是看到文本输入突然停下——即使有静态文字提示
             最长长度。不止是这个,你是否知道<textarea>没有maxlength=属性?真的没有。当然,
             <textarea>不算合法的HTML,可以愉快地忽略掉(除非你有幸能用HTML5)。

                 因此,为了统一指定最大长度,可以用专门做“数据存储”的CSS  class属性。这些class
             属性名称由两部分组成:第一部分是 maxLength前缀,第二部分是用来表示我们想要设定的最大
             长度的正整数。见右页中的HTML代码。

                 然后我们用JavaScript进行以下操作。

                 (1)  动态装饰包含这些元素的表单区域(简单起见,我假设用段落来包含。右页中的JS代码
             给段落加上了class属性),然后动态创建用于显示剩余长度反馈的占位符。
                 (2) 根据当前输入状态初始化反馈区域。
                 (3) 为按键事件绑定合适的事件监听器。
                 (4) 放置反馈区域(我放在对应输入区域右下角下),然后把它加入文档中。现在就能看到效
             果了!

                 这样每当发生按键输入时,只需要更新反馈即可。如果达到或者超出最大长度(当然,这在
             <textarea>上不可能发生),就回退到最大允许长度。

                 另外,注意这份代码中的几个技巧。

                   我们对keyup和keypress这两个事件都做了监听,以对非字符按键(多半是删除、剪切和
                   粘贴)和字符按键都作出响应。没有必要监听keydown,因为它是在文本改变之前发生的,
                   而此时我们没办法跨浏览器和键盘布局判断文本是否会改变。
                   为避免每次按键都重复计算最长长度,我们在初始化时把它缓存起来。为了把最长长度和
                   输入区域关联起来,我们用了JavaScript关联数组,这个关联数组关联了输入区域的id=属
                   性 和输入区域对象本身。这比用更多的属性要轻便点。
                     ①







             ——————————
                ① 这里用Prototype的identify()来保证我们的元素一定有一个id=属性。
   50   51   52   53   54   55   56   57   58   59   60