广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 5221 个阅读者
 
发表文章 发表投票 回覆文章
  可列印版   加为IE收藏   收藏主题   上一主题 | 下一主题   
keigo
个人头像
个人文章 个人相簿 个人日记 个人地图
初露锋芒
级别: 初露锋芒 该用户目前不上站
推文 x0 鲜花 x71
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片
推文 x0
[JScript][讨论] 计算字(元)数
常看到有些讨论区会限制发言的最大字数,有可能是资料库的栏位本身就有限制或是怕有人贴上大量文字的内容来捣乱。在网路上传输文字、图片等等的资料都是要消耗Server端及网路流量的资源,试想一下,有篇文章是10万字,若资料是存在资料库上的话,光是查询后要回传给Client端,酱子要开启一篇网页不知道要等上多久的时间了,所以才会做出最大字数的限制。

要做字数的检验又可以分为前端及后端两种,前端就是用JavaScript、VBScript等在文章未被送出前来做检验;后端的话就是靠JSP、PHP、ASP等程式来做检验。不过用后端检验的话,因为文章是已被传送出去了,若检验失败的话,酱资料往返其实也是在浪费资源,但并不表后端检验不好。若可以的话,比较建议是在文章送出前就先检验一次,到后端的话,若还是不放心还可以再做一次的检验。

那要如何来算出字数呢?常见的做法是当按下送出时会计算字数长度,或者是每当输入一个字时,就显示目前输入了多少字。我采取两种方法一起来使用。

要做成每输入一个字就计算字数的话,比较常用的Event是onKeyDown、onKeyUp、onKeyPress等三种。检验部份的Code都一样,只是差在所触发的Event是不同的罢了,但也因为Event不同,所以会有点差异,这等等会说明。

好~一样先来看Body部份的Code吧:



Div是用来放置讯息用的,总是要有地方显示输入多少字吧。TextArea是一个输入框,目前我使用的Event是onKeyUp,当keyUp时会触发count()函式并把TextArea的值当做参数传进去。按钮被Click时也会触发一个check()函式来检验是否在限制的字数内。

再来看JavaScript的部份:



这个JavaScript蛮简单的,用变数maxChr来设定最多可输入多少字,变数nowChr来储存目前已输入多少字,而count()函式则是计算目前输入多少字并把讯息显示在Div中,check()函式则是当按下送出钮时,用来检验是否目前输入的字数是否小于等于maxChr,若大于maxChr则警告说多输入了几个字,最后的部份是用来初始化当刚载入页面时Div用的。

应该不难懂上面的Code吧,没用到什么比较特殊的东西,试着执行看看后会发现,每输入一个字的话,会马上计算目前已输入多少字,但是~假设按下a按键却不放开的话,TextArea内会一直被出现aaaaa.......可是Div的讯息却都没变,也就是没计算字数,不过当放开A按键的话,就会计算字数了。



为什么会酱呢?这是因为在TextArea中用的Event是onKeyUp,也就是只有当按键被放开时才会触发它。

OK~若是把Event改成onKeyDown或是onKeyPress呢?onKeyDown跟onKeyPress是当按键被按下时就会触发了,嘿嘿~这下就算按着不放也能计算字数了吧!没错~改成酱虽能解决按住不放的问题,但~不知道眼尖的你有没有发现所计算出来的字数少了一个字?



那要怎么办呢?把计算出来的字数再加1吗?还是在TextArea中用onKeyUp及onKeyDown或是onKeyPress呢?这两个方法其实都可以用来解决问题,但还有一个更好的Event可以用-onPropertyChange。什么是onPropertyChange呢?这Event是用当某物件的属性值被改变时会触发的。

现在把TextArea中的Event改成用onPropertyChange后再来试试刚刚以上两种情况吧,嘿~都是能正确的计算出字数吧。onPropertyChange才是今天这主题的重点。

最后的送出钮只是最很简单的判断,各位应该看的懂也知道怎么改吧!

还有个问题是...用酱的判断字数的话,不管是1个字元还是2个字元都会被当成一个字,像a(半形)就是1个字元,而a(全形)却是2个字元,若资料库中栏位是设成30个字元的话,用来存放1个字元的字可以放30个,但是2个字元只能存放15个,那混合的话要怎么计算呢?

首先要知道在ASCII中,0~255都是1个字元的字,255以后的都是2个字元,现在只要在count()函式中判断输入的字是共字元,而maxChr及nowChr则变成是最大几字元及目前已输入几字元。



酱子改过后,就能算出所输入的字共几个字元了。有两种方法来计算字数,要使用那种就看各位的需求了。

范例浏览:

http://abgne.myweb.hinet....009_1.html

http://abgne.myweb.hinet....009_2.html

http://abgne.myweb.hinet....009_3.html

以上内容于2005/10/01发表在小弟的Blog里http://blog.xuite.net/abgne/diary1/4070061


[ 此文章被keigo在2005-10-06 17:02重新编辑 ]



欢迎各位参观小弟的Blog男丁格尔's 脱壳玩
献花 x0 回到顶端 [楼 主] From:台湾台湾索尼 | Posted:2005-10-02 00:38 |
Avery90
个人文章 个人相簿 个人日记 个人地图
特殊贡献奖
小人物
级别: 小人物 该用户目前不上站
推文 x0 鲜花 x21
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

虽然之前知道怎么用

但是没有那么详细
Thx~~~ 表情


献花 x0 回到顶端 [1 楼] From:台湾中华电信 | Posted:2005-10-06 19:27 |

首页  发表文章 发表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.054366 second(s),query:16 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言