js弹球游戏实现-js计算篮球弹起

以 我将来想成为篮球明星 为题 帮忙写一篇英文作文 不要用翻译软件

js弹球游戏实现-js计算篮球弹起

ghjgahjgsha

hs jahjs uaid hjbn sba hjhjak hsjjh jkisoajkx kzkjdks kjska jkaj d jkjsakjkdajk jkjakjkd jdkajdueieu ukapaoxm opo opo,xl mkcklkdk kokmk akoksol qsdhjjs ajiksj xhjja qoai xjaks jdksjkjd ksijksj kjksjaojd jskalj jaljdk akjdk .

jdksaj isudi jkcxajk skaj jijkj jkajdkljk polkm qwjakxm xnalao zjzkaozk aklzk azmkmz mzkmkzm qpaolzk aklaopp iaoapsoa sakjska skjskd ksjdksa jLIIAIISJDSKA jskjkxjkqop jdskj laklaoPOQPOQ jdkajk alkaoiw qiuuiuiw dhjshja jakjs kajksakjskajska ajskajsajks iqowiqo jskajksh dsjhdsjhdjsj hdshjhjhsfjdkahjhdjsh hasjkhdsjkhdjsahdjsak hjdjakjs udiudj shdjshdjakhdjsah hdjahdkjsadh dhjsdhjsah dhajhjahd hdsajahdkah dhakoia.

篮球训练计划

一、弹跳力是全身力量、跑动速度、反应速度、身体协调性、柔韧性、灵活性的综合体现。

所以我们不可以认为提高弹跳就成天的跳跳的就行了。你必须坚持每天拉伸自己全身各部位的肌腱、韧带、肌肉,扩大关节的活动范围,同时,做各种复杂的有利于提高身体协调性的体操。动作要准确、优美、既有力又放松。

二、力量训练最好由身体训练教练安排和辅导。

如自己进行训练,最好每周进行2到4次的大力量训练,训练时必须注意安全,以免发生意外伤害。所谓大力量训练就是利用杠铃进行大负荷的练习。最典型常用的有三种:

负重蹲起,提铃,抓举。总之,这几项练习的成绩越高,你的弹跳力就越好。

至于每次练习的重量、组数、次数、动作规格等问题,原则是:

1、大力量训练每周至少二次,不多于四次,要给身体超量恢复的时间,但要长年进行,不可间断。

2、每次课最好安排以上所述三项练习方法。

3、要讲究大力量训练的技术动作规格,切不可乱来。

4、小力量训练是指使用各种综合训练器械和哑铃等进行训练。重量较轻,组数和次数较多。目的是提高肌肉耐力,增粗肌纤维,减少脂肪,小力量训练可以变化着花园天天练,但最好不要和大力量训练同时进行。无论大力量还是小力量训练,一次课的时间不要拖的太长,1.5小时至2小时为宜。有强度还要有密度。

三、速度训练也是提高弹跳力的一个重要方面。

反复冲刺训练还是有必要的。30次,50次,也许80次,那就要看你的吃苦精神了。所谓冲刺,要求你自己在准备活动后全速往前冲,而不是中速。专项速度训练同大力量训练相同,不必天天练,每周三小时即可。还要特别注意运用小;力量训练手段增强大腿后侧肌肉群的力量。

四、各种专门的弹跳练习手段非常多,诸如跳绳、跳栏、摸篮圈、摸小黑框上沿,甚至摸篮板上沿。

最后,我要提一提神经系统和弹跳力的关系。我们已经知道速度、力量、协调性、柔韧性、灵活性这些素质在瞬间综合向下作用于地面时就产生弹跳力,那么什么东西是这些素质在瞬间同时爆发呢?就是动机和运动神经系统。也就是说,如果你真的想高居一切人之上,你就必须想尽一切办法使自己的运动神经系统想自己全身的肌肉发出最强的冲动信号。这种强刺激迫使肌肉群激烈收缩产生巨大能量,肌肉群剧烈收缩有反过来促使运动神经系统更灵敏,能发出更强烈的冲动。两者相互促进,你就越跳越高。然而,这也是难点中的难点,没有超强的动机,运动神经系统就没有超强的冲动,一切所谓的科学化、现代化、管理、训练方法和手段全是废话。最后,祝你梦想成真。

另:

先天很重要,美国最著名纵跳训练计划, 练成预计纵跳能力可以提高20到30厘米以上, 锻炼过程很辛苦, 整个过程要15个星期.

对于每个动作项目,如果一种动作要作3组,组与组之间休息不能超过2分钟,若完成了,需直接做下个项目,记住不要休息!!

第一项:半蹲跳

1、开始时,半蹲至?的位置,双手放置于前,

2、向上跳离地面最少20到25cm。(若你觉得容易的话,你可以跳至25-30cm)。 当在空中,你的双手需放在后面。 着地时,完成一次。

接下来,只需重复以上步骤!!!

迅速提高弹跳力训练教程2

第二项:抬脚尖(提踵)

1.首先,找个梯级或一本书来垫脚,然后只把脚尖放在上面,脚跟不得着地或垫着

2.脚尖抬到最高点

3.再慢慢放下,完成一次..双脚完成,完成一个组.

迅速提高弹跳力训练教程3

第三项:台阶

1. 找张椅子来, 把一只脚放上去,呈90度

2.尽全力的跳开, 在空中换脚,在放在椅子上,

3.重复2,将原起跳的脚放回椅子上,完成另外一跳。

迅速提高弹跳力训练教程4

第四项:纵跳

1. 双脚放直, 与肩同宽,"锁紧"你的膝盖...

2. 只用你的小腿跳, 只能弯曲你的脚腂, 膝盖尽量不弯曲...

3. 到地时,再迅速起跳,完成一次...

这一项很难, 你可用你的手帮助起跳...

迅速提高弹跳力训练教程5

第五项:脚尖跳

1. 将脚尖抬到最高点,

2. 用脚尖快速起跳, 跳时不得超过1.5 或2.5cm

蛙跳练习是必要的,对于弹跳力的提高有一定的帮助,因为毕竟这是训练力量的一个途径。除此之外,还有其他的一些方法。

第一种方法,是最有效的,也是难度最大的,可以让你在短时间内提高弹跳。具体做法:挖个坑,大概一米左右深。你的腿上绑好5斤的沙袋,跳入坑里。试着在负重的情况下从坑中跃出。半个月后,将坑挖深20公分,而负重增加2—3斤,继续练习。如此循环,最后到了不能再负重、也不能从坑里跃起的时候,练习就到此为止。解除负重,再试试看能跳多高。

诙?址椒ǎ?Ч?皇呛苊飨裕?侨菀资凳?>咛宸椒ǎ航捧咨习笊舷鹌そ睿?刈萏?C咳樟废鞍胄∈薄5?俏腋芯酰?庵址椒ㄐЧ?幻飨浴?

祝你好运,未来的体育明星!

要发展爆发力,必须增大肌肉的收缩力量和工作距离,缩短工作时间,力量训练时,要以小负荷的机械作快速运动,在不降低速度的情况下,逐步增大负荷提高肌肉收缩力量。刚才说的使用“背负投”的技术动作摔倒对手,主要是靠肌肉的收缩力量增大爆发力。力量的增大能增强对技术的控制能力,所以在平常训练中,不但要在技术上下功夫,而且还要特别在增如爆发力、提高肌肉收缩速度上下功夫。实践证明,高强度的爆发力是提高成绩必不可少的因素。那么怎样提高爆发力呢?(一)变换负荷与速度。(二)加强专业技术训练,提高肌肉的控制能力和动作发力前的放松能力。(三)肌肉的初长度,只有拉长的肌肉收缩时才有更快的速度和力量。(四)力量练习后的放松练习。

在爆发力的因素中,力量起主导作用,因此力量的增长有助于爆发力的发展。但力量绝不等于爆发力。就是说实战中并不是有力量就能把技术运用好。一个柔道运动员的爆发力,必须通过基本力量与速度、技术,灵敏度协调的结合起来,才能发挥。有的人可以举起相当重的杠铃,但一摔跤就不行了,具体说是缺乏专项力量。柔道运动员对抗时,既要力量,又要速度,还要耐力,我们的一些运动员感到力量上不差,关键是专项能力和快速力量差。在今后训练中要重视在一盘力量转移到专项力量的基础上提高专项力量。

发展力量应注意的问题:

(一)负荷。事实说明,只有在一定重量条件下进行力量训练,才可能使力量 增大,并且力量训练中采用的负荷不同,其效果各异,因此,在训练中因人而异,合理安排负荷。

(二)超量恢复。运动中大量能量物资消耗,运动停止,分解代谢居次要地位,能量物质合成开始恢复并超过原来体内能量物质含量。

(三)训练间隔。实践证明,力量训练以隔最好,因为力量增长速度快,停止训练后消退也快。

(四)年龄与性别。同一个人的力量训练,在不同年龄时期反应不同,男女力量值的大小也有很大差别。

无论男女,只要坚持进行力量训练,对保持和发展力量素质有良好的效果。

第一,最重要的是你对扣篮非常向往`

第二,你必须耐的住寂寞,吃的了苦`能够持之以恒.

第三,你必须对自己自信,相信自己可以行的!历史上有很多矮个子扣篮的`比如小土豆韦伯 ,170不足`甚至可以双手反扣`2000届全国扣篮冠军175.在美国矮于175可以扣篮的很多`虽然欧美人体质确实很强`但是我们通过合适的训练完全可以达到.我们学校有个美国留学生叫马修,大家也许认识`比较胖也不是很高`但他可以原地起跳抓住篮框.

第四,扣篮不是你的最终目的`锻炼身体,给人带来力量和美,给人飞的感觉.当然你自己要喜

欢那种飞翔的感觉.

第五,如果你低于170,当然你不能奢求扣标准的3.05的篮框,因为人总是有极限``你不是天

才`而且又不可能专业去训练.但是完全可以扣2.9-2.95左右的篮框,大部分篮框都这么高`

当然是街头的.体育馆里的除外.

第7,有一双好篮球鞋和充分的保护.第8,有时间和精力去练习,不怕枯燥.

第9,有一堆朋友的支持与参与,这个很重要,最好有几个弹跳好的一起玩. 第10,能够熟练的单手飞身上篮和飞翔的欲望.欲望是第一位.

二,具体身体各方面要求

1,这个过程大概要持续几年吧`但是平时注意身体素质锻炼,爱好体育`并且训练得当的完全可以在1年-2年之内可以扣篮,至少你可以给人一种扣篮的感觉,可以看到你飞翔的雄姿.记住要不间断的锻炼,但不是每天``你必须每个星期保持一定的时间`平时的生活中要注意保持训练效果`2,身体要保持脂肪较少.一般经常锻炼的不会有这个问题`关键是你起步的时候可能不是这样`不过也没关系 3,对体育运动不光是篮球爱好,如果让你去练田径,你不要觉得没用或者不相关,甚至拒绝. 4,在必要时候可以用一个假期(暑假最佳)去专门练习`从早上到晚上不间断.这个看上去有点BT,但是很快你会发现自己能够适应,并且每天虽然累但是总是有用不完的力量.5,相信我说的这些话`如果你觉得没用可以立即离开. 6,最好会游泳,并肯去健身房,或者自己想办法.7,扣篮可以让你自信,但切记不可以去用这个鄙视比你高的人`要知道比你高的练这个比你会很容易.每个 人都有自己的长处和潜力.

8,不要影响学习`这个是你学习之外的事情`可以肯定的是你即使可以扣篮也进不了专业队 ,你还得靠学习.9,寓教于乐,不要着急看自己的成果,坚持并且保持,你会慢慢看到成效,特别注意"高原反应 "这个在任何练习过程中都有,比如练习吉他,钢琴,做奥赛等等`,意志第一.10,在与篮球场上要积极,并善于模仿球星动作.

三,实施过程(分几段)

当你从第一天开始,就要把它当成生活一部分,不能三天打鱼.不要怕自己练不成,即使练不了的话也不要难过`因为你在这个过程中学到的远远比扣篮本身多的多.

(1)篮球专项练习:

扣篮为的是打篮球`现在先讲讲如何打篮球问题.篮球是集体项目,这一点必须明确.但是我们很多爱好篮球的朋友却忽视这一点独打独干``以为自己打球了不得`这个是错误的``一个人不管谁代替不了一个群体.也许你能处理好关键球`但是篮球的乐趣 不在于此,每个人都开心是最开心的. 不要觉得自己打的不错,甚至去鄙视别人不会打的`心态要重要.素养是第一,一个打了3年的但技术很好的就是赶不上一个打了6年的技术不好的`这个是事实, 因为篮球的意识最重要,经历也很重要`对篮球的理解也不一样.千万不要觉得自己打球是去打仗,非要和别人血拼,宽容睿智一点可以让你交到不少朋友`学到不少东西 . 知道这些,你才可以去打街头篮球甚至是正式的比赛``扣篮才会成为你的武器.

(上篮) 要扣篮,首先要上好篮.这里有许多注意的``很多人上篮很准`但是跳的不高`这个实战中有用`但对于我们的扣篮没有用处.当然球感很重要.上篮分低手和高手,我们采取高 手上篮,低手在其他地方用到.

练习1.高手上篮从中线2侧,交替上篮`10个一组`每次起跳用全力`反复练习`直到你能够在你起跳的最高点处把手中的球也送到最高点,这个可以弥补你的身高,也可以增加你的滞空能力.这个属于基础练习`在平时的上篮中要注意这个要求.你所有的上篮都要遵循这个标准.注意重心一定在起跳前放到起跳腿上,这样利于爆发.多尝试`要自己感觉是坐上弹簧一样起跳有力.这样的感觉最终将导致你有飞一样的感觉.多练习上篮. 练习2.底线上篮`要求如前`但是要侧手把篮球送进篮框,记住不要怕不进`不要怕砸篮框 `一直要把球留在手里直到它升到最高点才出手. 练习3.用球砸篮板,要求如前`前提是你必须摸到篮板,这个要考虑到弹跳的问题,弹跳练习在下面讲.上篮的目标是篮板,在最高点时把篮球用手推到篮板上不要松手.反复这样,给自己一个明确的目标`比如今天的高度是在篮板下边沿,过段日子看自己是否提高? 练习4.远距离上篮,一定要循序渐进,一开始起跳距离离篮板进点`以后逐渐加大`标准是你能把篮球送到篮框下如同正常上篮.注意自己的姿势,一定要舒展,潇洒.这个不急`是一个慢慢的过程,也许你弹跳还跟不上`千万不要盲目去加大距离`那样会使你上篮养成不好习惯 `动作会变形.但是不时的尝试比原来远的多的距离体会一下感觉也是很必要的`这样会让你约束自己的动作.直到有一天你能在罚分线用低手上篮,在第4个投篮点上起跳高手上篮.把 篮球送向篮框.注意自己的动作,起跳中要体会要飞翔的感觉. 练习5.绕框练习,就是在一边起跳,反勾手上篮,空中的感觉如前.

以上5条练习是最基本的练习,可以培养你的滞空能力和对身体的控制能力,以及上篮的协调性,千万记住球不到最高的地方不要出手`当然这样对日常的比赛有一定的影响.不过你要自己学会调节.这些练习要和投篮一样贯穿于你的篮球练习中.当然你自己还可以找出类似的训练方法,很多,大家在实际中学习演练.必要的是你要多学习一些篮球巨星的动作`虽然 不一定做的好`做的到位`但是反复训练这些难度高的动作可以培养你的协调性,灵活性,弹跳等等`还可以曾加篮球的观赏性.上篮一定要有欲望.

(运球,防守,投篮等等)

运球很重要`实战中扣篮不是别人让开条道让你去扣`你总是要有一定的过人和运球.但是这个和现在讨论的核心问题关联不大`故略去`在以后的文章中会讲.

(篮板) 有利于弹跳和意识`会在弹跳部分讲解.

(2)弹跳专项练习

没有弹跳的扣篮是不可以想象的,除非你和奥胖,姚明一样高.对于我们所追求的扣篮实际上就是一种展示弹跳和飞翔的姿势的美的追求.这里分2个部分,一部分独立于篮球`一部结合于篮球.

A.独立于篮球.

1.短跑与跳远.这2个很重要`一个优秀的短跑运动员必然是一个具有相当实力的跳远选手.速度也是一种享受.在扣篮中,股4头肌以及腓肠肌的收缩是最强烈的,而短跑和跳远正是练习这2快爆发力的好手段.大家平时体育课啊`课余时间可以练习这2项.短跑:30米,50米冲刺,100米就不需要了.但是作为全面发展还是必要的`短跑中注意体会那 2块肌肉的收缩`一定要尽全力.短跑要经常跑`但跑的时间不一定很长`保持肌肉的一定紧张

对训练和提高很有帮助.跳远: 立定跳远,一定要用全力`特别注意体会肌肉的收缩.冲刺跳,注意起跑速度和起跳时重心腿的感觉,起跳时要感觉你的跟腱拉到极至.蛙跳:一般20米,4个来回`可以放到篮球后打完后练习,在你很疲劳的时候练习这些很容易提高`但是千万不要过度。。跟腱练习大家都知道跟腱长短对弹跳很有影响,如果说前面的练习主要是大腿力量的训练`那么下面的就是对腓肠肌和跟腱的训练负重提踵:一定要快速`不然你小腿很容易变粗`一定要感到跟腱被拉伸到最大限度`并有一种要撕裂的感觉当然不是真的。一般健身房有这样的器材`没有的话也可以自己做。最到一定的时候可以到台阶上做,既脚尖踩着台阶,其余部分不踩,做提踵。

负重下蹲再爆发起跳,一般10个一组`8组左右。单足跳,一条腿30个,轮流8组。还是老要求`体会到跟腱的拉伸。单腿支撑下蹲再起来提踵,这个难度很高`等你腿部力量到一定程度可以做`可以锻炼大腿的静力和小腿。

以上练习不一定特别的去做`但是在你平时生活中一定要经常做`并且像个样子,这样才有效果。

3。脂肪消耗以及对抗力量练习

游泳:这个是最好的方法,可以快速消耗脂肪,你还可以尝试在浅水里跑步,这样非常好女生也可以尝试。当然要游泳就一个暑假每天游,这个要当成必修课,而且又可以看美女多爽!健身:从传统意义上讲,人越轻越好`但力量很重要`他可以保护你在对抗中不受伤。以适当的负荷去练习比如卧推等等`对短跑的提高以及上篮的力量爆发很有好处。最佳的是拳击,可以充分调动你全身,尤其腰腹。腰腹力量对弹跳非常至关重要。滞空和舒展来自于弹跳和你的腰腹力量和控制能力。腰腹专项练习: 起坐,转体,背起坐,负重起腰,对抗练习,双臂支撑平举腿使腿和身体垂直等等都很 好。

看了你的志向!!很远大啊!!

食物:食物上你要注意营养均衡,不能挑食什么的(汗!)还有要少吃脂肪含量多的,例如肥肉!其他的不用太讲究,各种食物都是比较有营养的!

运动器材等:大型的我就不说了,其实也浪费钱。你有空多举哑铃就好了,最好每天200个,左右手都要。还要每天在早上长跑2000~3000米,不是慢跑(这个是给老人的!)要象比赛时候那样 。还有最好在晚上坐200个俯卧撑,加上100个仰卧起做。

最重要一点:打篮球就要熟悉球感,你最好在任何有空的时间都带这个篮球练习运球。有篮球场的地方更好,直接练习任何与篮球有关的项目,例如投篮。这个是最重要的,你有了出色的球感,就算没有过人的身体素质,你也会是个不错的球员,例如我的偶像NASH,你看他比起黑人来不知道要弱多少,但是他照样是太阳的当家核心,因为他的篮球感觉很强,知道什么时候该传,什么时候该投,他现在可是联盟第一PG,助攻排名第一!!

长高:这个很大程度上跟遗传有关,但也有部分是靠训练的,我觉得不用太刻意,这样会适得其反,其实你在坚持打篮球的过程中,你可以发现自己会不知不觉的高起来的,实在不行也没有办法,矮也不妨碍你打球出色的程度!!

说下对不起,我不能给你很完全的训练计划,一是我懒,二是我也不知道你的作息时间!!(其实还我太懒!)

sorry ,希望能帮助你

首先,腿部基础力量,1组二十个。接着负重蛙跳3组共六十个。(鉴于你有力量基础)

隔天练卧推,如果你原来练到60公斤左右,第一次55公斤(保护),第二次就加到65公斤。每次5组,每组20个。练完当天负重仰卧起坐80到160个,一口气完成。

每组间只歇2分钟,这2分钟内也别闲着,做一些韧带拉伸运动,避免受伤。每天一练,上身力量和下身隔天进行。注意补充蛋白质。平时做一些维持性的训练。

篮球赛观后感1300字

经过一个多月的焦急等待,Cuba四川赛区的比赛终于在我校拉开帷幕,对于我们这些篮球爱好者来说,这是一个很好的契机可以让我们领略到高水平篮球比赛的魅力,同时也可以给我们这些初学者一个很好的机会去领悟和学习篮球比赛的技巧和团队配合的方式。 由于时间有限。我只看了一场我们学校校队跟外校的一场比赛,这其中我对我们学校校队的首发控卫印象最为深刻。他不仅速度快,而且投篮很准,屡屡用突破和急停跳投撕破对方防线。让我印象最深的一个镜头就是当他和我方一内线大个挡拆时,通过单挡掩护后,他佯装出手投篮,将防守球员骗起,就在这时,他眼睛用余光看到了我方前锋在迅速空切,他毫不犹豫将球一拨,只见篮球飞快的穿越了对方两名球员的防守区域,如手术刀般的精准的找到了那位空切的前锋,此时这名前锋早已无人防守,轻松将球打进。主场球迷都激动的为这个精彩的进球而喝彩,而这一球也极大地将队员们的士气调动起来,对方教练见形势不妙,赶忙向裁判叫了一个暂停。这时候我就在想,真正的孔位不仅要有得分能力,更重要的是应该得有组织进攻的能力,只有将队员的进攻能力跟进攻欲望充分调动起来才有取得胜利的希望。这才是一个控球后卫真正的精髓所在,这也是为什么一些攻击力不强但组织球能力很好的球星能够在NBA立足的原因。

这场比赛我们校队以30分的巨大优势战胜了来访的阿坝师专,我想,这场比赛不是属于某个人的胜利,也不是属于某个球队的胜利,

require.async(['wkcommon:widget/ui/lib/sio/sio.js'], function(sio) { var url = ' sio.callByBrowser( url, function () { BAIDU_CLB_fillSlotAsync('u2845605','cpro_u2845605'); } ); });

而是属于我们学校良好的篮球氛围建设的胜利,一场酣畅淋漓的大胜让我们获得了巨大的信心,同时我们也相信我们那支勇于拼搏的校队最终能够披荆斩棘,最终捧起冠军奖杯!

这次的比赛让我感触良多,这次的比赛让我近距离的看到了篮球的跳跃、飞舞;感受到了篮球带给我们的魅力与震撼力!篮球比赛更是体力上的较量,且包含了技巧与智慧。比如抢球时猛跳,却因为抓不准时间,而总是抢不到;截球时,又双手乱舞,想以密不透风的动作拦阻对方传球,碰到差的对手固然有效,遇见高手却毫无用处,最后往往累得上气不接下气而先退场。所以当你觉得体能不济的时候,应该渐进的方式提升,而不要勉更应检讨一下,是不是在基本的技巧出了问题,而非逞一时之勇。

这场比赛还让我想了更多关于大学篮球文化建设方面的事情,大学校园具备建设篮球文化的多方面优势。首先大学校园的主体是大学生,这是一个充满活力,有良好的文化修养和文化素质,渴望激情、追求时尚的群体,容易接受篮球文化;其次,大学校园作为高等院校,有更多的经费和条件组织各种相关的篮球活动,促进篮球文化的传播。同时,大学校园地位特殊,具有社会示范性作用,能在很大程度上、很长时间内影响整个社会爱好兴趣的取向。篮球文化在大学校园的兴盛必然会带动整个社会篮球文化的传播。

js 字符串强转数组,求了解IE后台函数的高人解答

楼主你几近语无伦次,费解。。。你说要正则那就正则吧

('truetureldllrkfkkr').match(/r/g)

返回的是数组["r", "r", "r", "r"]

用JS如何验证输入必须是字母或数字?

给你参考一下

js类:

/***************************************************************

* 作者:mousecat, mousecat4444@126.com

* 版本:v1.3

* 修改记录:

* (1)增加默认验证提示信息。

* (2)修改电话号码验证规则,使之符合086-010-87654321

* (3)简化类调用方式

* (4)简化描述符字符个数

* (5)增加相关验证符(小数验证,整数验证)

* (6)更新帮助说明

* (7)去掉收尾两边空格

* (8)没有rq标识符验证的控件,当为空时可以正确提交,当不为空时根据添加的验证符进行判断

* (9)没有自定义函数对象可以正常运行

* (10)修改程序容错信息

*

* 特点:

* (1)描述符(validation descrīptor)实现验证

* (2)允许添加自定义函数

* (3)面向对象(the oriented_object)

* (4)验证方式包括:onSubmit,onBlur,AJAX。

* (5)应用div形式显示提示信息

* (6)对提示信息应用css样式

* (7)对于程序级错误给予提示

* (8)正确识别中文、英文字符长度

* (9)实现表单控件验证、表单集合验证

* (10)对于大型表单验证更加方便容易

* (11)支持 ie6、firefox2.0 浏览器

* (12)方便调用方式

* (13)设置缺省提示信息

*

* 使用说明:

* (1)包含js验证类

* <head>

* <scrīpt language="Javascrīpt" src="gen_validator.js" type="text/javascrīpt"></scrīpt>

* </head>

* (2)定义验证对象集合

* var a_fields = {

* 'username':{'rq':'必填项', 'mx=5':'', 'aa':'字母'},

* 'Email':{'mx=20':'', 'rq':'', 'el':''},

* 'Phone':{'te':''},

* 'introduce':{'mx=20':''},

* 'address':{'ds=0':'必须选择地区!'}

* }

* 其中,

* 'username':代表需要验证的表单控件

* 'rq':验证标识符(参见标识符说明)

* '必填项':验证提示信息

* (3)调用验证主函数

* html_form(a_fields, 'myform', 'testCustom');

* 参数1:验证对象集合

* 参数2:表单名称

* 参数3:自定义函数名称

* (4)备注:

* testCustom:自定义验证函数

*

* 注意事项:

* (1)验证提示div的id需要按照验证控件id值+"txt"形式表示

* 如:验证控件id为username,那么显示提示信息的位置id为txtusername。

* (2)当使用控件验证时,需要增加控件的自定义属性(详见使用范例)

* descrīptor:验证描述符列表,中间用"|"分隔(可采用默认提示信息)

* errormsg:错误信息列表,中间用"|"分隔,对应顺序应该和descrīptor顺序一致,最后一项应为正确时(默认)的提示信息

* 如果某一提示信息采用默认形式"|"不能省略

* (3)js验证类对象声明必须在html form之后

* (4)验证标识符必须保持一致

* (5)验证提示信息必须保持一致

* (6)控件验证标识符(descrīptor)和定义的验证标识符对象必须相同。

*

* 标识符说明(括号内标识为略写模式):

* (1)required(rq):必填项

* (2)maxlength=(mx=):最大长度,例:maxlen=25

* (3)minlength=(mi=):最小长度,例:minlen=5

* (4)alphanumeric(an):验证字符和数字

* (5)numeric(nc):验证数字

* (6)alpha(aa):验证字符

* (7)email(el):验证邮箱

* (8)lessthan=(lt):验证对象要小于某值,例:lt=1000

* (9)greaterthan=(gt):验证对象要大于某值,例:gt=10

* (10)regexp=(rg=):正则表达式验证,例:regexp=^[A-Za-z]{1,20}$

* (11)doselect=0(ds=0):验证select控件是否被选择

* (12)alnumhyphen(ay):验证字符、数字、-

* (13)telephone(te):验证电话格式,例:086-010-58022633

* (14)real(rl):验证实数格式,例:12.34

* (15)http(hp):验证url地址格式,例:参数初始化////////////////////////////

//缺省样式规则

//格式:错误样式|正确样式

var defaultStyle = "style2|style1";

//缺省错误提示

var ōbjDescTips = {

required : "请输入必填项",

maxlength : "输入项最大长度不能超过",

minlength : "输入项最小长度不能小于",

alphanumeric : "输入项必须为字母和数字",

numeric : "输入项必须为数字",

alpha : "输入项必须为字母",

alnumhyphen : "输入项必须为字母、数字、横线、下划线",

email : "输入项必须为电子邮件格式",

lessthan : "输入项必须为数字",

lessthan_two : "输入项必须小于",

greaterthan : "输入项必须为数字",

greaterthan_two : "输入项必须大于",

regexp : "输入项必须符合自定义格式",

doselect : "请选择下拉选项",

telephone : "固定电话格式错误",

real : "实数格式错误",

http : "网址格式错误"

}

//缺省正确提示信息

var defaultTip = {

username : "请输入用户名",

Email : "请输入邮箱地址",

Phone : "请输入电话号码",

introduce : "请输入个人描述",

Lovers : "请选择个人爱好",

address : "请选择地区"

};

///////////////////////功能函数//////////////////////////////////

window.onerror = function() {return true};

String.prototype.trueLen = function() {return this.replace(/[^\x00-\xff]/g,"**").length;}

String.prototype.trim = function() {return this.replace(/(^\s*)|(\s*$)/g, "");};

//快捷方式

function $() {

return document.getElementById(arguments[0]);

}

//信息提示

function dispInfo(msgObj, msgInfo, msgClass) {

var ōbjName = msgObj.name

var msgItem = $("txt" + objName);

if (!msgItem) {

alert("Bug: " + objName + "缺少信息显示区域!");

return false;

}

msgItem.style.display = "block";

msgItem.className = msgClass;

msgItem.innerHTML = msgInfo;

}

//////////////////////////////核心类//////////////////////////////

//控件验证

function unitCheck(evt) {

var evt = evt ? evt : window.event;

var srcEle = (evt.target) ? evt.target : evt.srcElement;

var strDescrīptor = srcEle.getAttribute("descrīptor");

var arrDescrīptor = strDescrīptor.split('|');

var arrStyle = defaultStyle.split('|');

if (srcEle.getAttribute("errormsg") == null) {

var arrErrorMsg = new Array();

} else {

var strErrorMsg = srcEle.getAttribute("errormsg");

var arrErrorMsg = strErrorMsg.split('|');

}

if (strDescrīptor.search(/rq|required|ds/gi) == -1) {

if (srcEle.value.length == 0) {

dispInfo(srcEle, defaultTip[srcEle.id], arrStyle[1]);

return true;

}

}

for (var iteDes = 0; iteDes < arrDescrīptor.length; iteDes++) {

if (!V2validateData(arrDescrīptor[iteDes], srcEle, arrErrorMsg[iteDes])) return false;

}

disName = srcEle.name;

dispInfo(srcEle, defaultTip[disName], arrStyle[1]);

return true;

}

function Validator(frmname) {

this.formobj = document.forms[frmname];

this.strForm = frmname;

if(!this.formobj) {

alert("BUG: 不能得到表单对象" + frmname);

return false;

}

if(this.formobj.onsubmit) {

this.formobj.old_onsubmit = this.formobj.onsubmit;

this.formobj.onsubmit = null;

} else {

this.formobj.old_onsubmit = null;

}

this.formobj.onsubmit = form_submit_handler;

this.addValidation = add_validation;

this.setAddnlValidationFunction = set_addnl_vfunction;

this.clearAllValidations = clear_all_validations;

}

function set_addnl_vfunction(functionname) {

this.formobj.addnlvalidation = functionname;

}

function clear_all_validations() {

for(var itr = 0;itr < this.formobj.elements.length;itr++) {

this.formobj.elements[itr].validationset = null;

}

}

function form_submit_handler() {

for(var itr = 0;itr < this.elements.length;itr++) {

if(this.elements[itr].validationset && !this.elements[itr].validationset.validate()) {

return false;

}

}

if(this.addnlvalidation) {

str =" var ret = "+this.addnlvalidation+"()";

eval(str);

if(!ret) return ret;

}

return true;

}

function add_validation(itemname, descrīptor, errstr) {

if(!this.formobj) {

alert("BUG: 不能得到表单对象!");

return;

}

var itemobj = this.formobj[itemname];

if(!itemobj) {

alert("BUG: 不能得到被验证对象: "+itemname);

return false;

}

if(!itemobj.validationset) {

itemobj.validationset = new ValidationSet(itemobj);

}

itemobj.validationset.add(descrīptor, errstr);

}

function ValidationSet(inputitem) {

this.vSet = new Array();

this.add = add_validationdesc;

this.validate = vset_validate;

this.itemobj = inputitem;

}

function add_validationdesc(desc, error) {

this.vSet[this.vSet.length] = new ValidationDesc(this.itemobj, desc, error);

}

function vset_validate() {

for(var itr=0;itr<this.vSet.length;itr++) {

if(!this.vSet[itr].validate()) {

return false;

}

}

return true;

}

function ValidationDesc(inputitem, desc, error) {

this.desc=desc;

this.error=error;

this.itemobj = inputitem;

this.validate=vdesc_validate;

}

function vdesc_validate() {

var arrStyle = defaultStyle.split('|');

if (!this.itemobj.getAttribute("descrīptor")) {

alert('Bug:缺少' + this.itemobj.id + '验证标识符descrīptor');

return false;

}

if (this.itemobj.getAttribute("descrīptor").search(/rq|required|ds/gi) == -1) {

if (this.itemobj.value.length == 0) {

dispInfo(this.itemobj, defaultTip[this.itemobj.id], arrStyle[1]);

return true;

}

}

if(!V2validateData(this.desc, this.itemobj, this.error)) {

this.itemobj.focus();

return false;

}

return true;

}

function V2validateData(strValidateStr, objValue, strError) {

var epos = strValidateStr.search("=");

var command = "";

var cmdvalue = "";

var arrStyle = defaultStyle.split('|');

if(epos >= 0) {

command = strValidateStr.substring(0,epos);

cmdvalue = strValidateStr.substr(epos+1);

} else {

command = strValidateStr;

}

var _value = objValue.value.trim();

switch(command) {

case "required":

case "rq":

{

if(eval(_value.trueLen()) == 0) {

if (!strError || strError.length == 0) {

strError = objDescTips.required;

}

dispInfo(objValue, strError, arrStyle[0]);

return false;

}

break;

}

case "maxlength":

case "mx":

{

if(eval(_value.trueLen()) > eval(cmdvalue)) {

if (!strError || strError.length == 0) {

strError = objDescTips.maxlength + cmdvalue;

}

dispInfo(objValue, strError, arrStyle[0]);

return false;

}

break;

}

case "minlength":

case "mi":

{

if(eval(_value.trueLen()) < eval(cmdvalue)) {

if (!strError || strError.length == 0) {

strError = objDesTip.minlength + cmdvalue;

return false;

}

dispInfo(objValue, strError, arrStyle[0]);

return false;

}

break;

}

case "alphanumeric":

case "an":

{

var charpos = _value.search("[^A-Za-z0-9]");

if(_value.trueLen() > 0 && charpos >= 0) {

if (!strError || strError.length == 0) {

strError = objDescTips.alphanumeric;

}

dispInfo(objValue, strError, arrStyle[0]);

return false;

}

break;

}

case "numeric":

case "nc":

{

var charpos = _value.search("[^0-9]");

if(_value.trueLen() > 0 && charpos >= 0) {

if (!strError || strError.length == 0) {

strError = objDescTips.numeric;

}

dispInfo(objValue, strError, arrStyle[0]);

return false;

}

break;

}

case "alpha":

case "aa":

{

var charpos = _value.search("[^A-Za-z]");

if(_value.trueLen() > 0 && charpos >= 0) {

if (!strError || strError.length == 0) {

strError = objDescTips.alpha;

}

dispInfo(objValue, strError, arrStyle[0]);

return false;

}

break;

}

case "alnumhyphen":

case "ay":

{

var charpos = _value.search("[^A-Za-z0-9\-_]");

if(_value.trueLen() > 0 && charpos >= 0) {

if (!strError || strError.length == 0) {

strError = objDescTips.alnumhyphen;

}

dispInfo(objValue, strError, arrStyle[0]);

return false;

}

break;

}

case "email":

case "el":

{

var pattern = /^[\w-\.]+\@[\w\.-]+\.[a-z]{2,4}$/;

if (!pattern.test(_value)) {

if (!strError || strError.length == 0) {

strError = objDescTips.email;

}

dispInfo(objValue, strError, arrStyle[0]);

return false;

}

break;

}

case "lessthan":

case "lt":

{

if(isNaN(_value)) {

if (!strError || strError.length == 0) {

strError = objDescTips.lessthan;

}

dispInfo(objValue, strError, arrStyle[0]);

return false;

}

if(eval(_value) >= eval(cmdvalue)) {

if (!strError || strError.length == 0) {

strError = objDescTips.lessthan_two + cmdvalue;

}

dispInfo(objValue, strError, arrStyle[0]);

return false;

}

break;

}

case "greaterthan":

case "gt":

{

if(isNaN(_value)) {

if (!strError || strError.length == 0) {

strError = objDescTips.greaterthan;

}

dispInfo(objValue, strError, arrStyle[0]);

return false;

}

if(eval(_value) <= eval(cmdvalue)) {

if (!strError || strError.length == 0) {

strError = objDescTips.greaterthan_two + cmdvalue;

}

dispInfo(objValue, strError, arrStyle[0]);

return false;

}

break;

}

case "regexp":

case "rg":

{

if(_value.trueLen() > 0) {

if(!_value.match(cmdvalue)) {

if (!strError || strError.length == 0) {

strError = objDescTips.regexp;

}

dispInfo(objValue, strError, arrStyle[0]);

return false;

}

}

break;

}

case "doselect":

case "ds":

{

if(objValue.selectedIndex == null) {

alert("BUG: 不能找到select对象");

return false;

}

if(objValue.selectedIndex == eval(cmdvalue)) {

if (!strError || strError.length == 0) {

strError = objDescTips.doselect;

}

dispInfo(objValue, strError, arrStyle[0]);

return false;

}

break;

}

case "telephone":

case "te":

{

var pattern = /^0?\d{2}\-?\d{3}\-?\d{8}$/;

if (!pattern.test(_value)) {

if (!strError || strError.length == 0) {

strError = objDescTips.telephone;

}

dispInfo(objValue, strError, arrStyle[0]);

return false;

}

break;

}

case "real":

case "rl":

{

var pattern = /^[\+\-]?\d*\.?\d*$/;

if (!pattern.test(_value)) {

if (!strError || strError.length == 0) {

strError = objDescTips.real;

}

dispInfo(objValue, strError, arrStyle[0]);

return false;

}

break;

}

case "http":

case "hp":

{

var pattern = /^http:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?$/;

if (!pattern.test(_value)) {

if (!strError || strError.length == 0) {

strError = objDescTips.http;

}

dispInfo(objValue, strError, arrStyle[0]);

return false;

}

break;

}

}

return true;

}

/////////////////////////用户调用接口////////////////////////////

function html_form(objSet, frmName) {

var frmvalidator = new Validator(frmName);

for (var objSingle in objSet) {

for (var descSets in objSet[objSingle]) {

if (objSet[objSingle][descSets] == '') {

frmvalidator.addValidation(objSingle, descSets);

} else {

frmvalidator.addValidation(objSingle, descSets, objSet[objSingle][descSets]);

}

}

}

//自定义函数

frmvalidator.setAddnlValidationFunction(arguments[2]);

}

html调用

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>Example for Validator</title>

<scrīpt language="Javascrīpt" src="gen_validator.js" type="text/javascrīpt"></scrīpt>

<style type="text/css">

<!--

.STYLE1 {color: #0000ff;font-size:10pt}

.STYLE2 {color: #FF0000;font-size:10pt}

-->

</style>

</head>

<body>

<form action="" name="myform" >

<table cellspacing="2" cellpadding="2" border="0">

<tr>

<td align="right">用户名</td>

<td><input type="text" name="username" id="username" ōnBlur="javascrīpt:unitCheck(event)" descrīptor='rq|mx=5|aa' errormsg='必填项||字母'><font size=2pt color=red>*</font>

<div id="txtusername" class='STYLE1'>请输入用户名</div> </td>

</tr>

<tr>

<td align="right">邮箱</td>

<td><input type="text" name="Email" id="Email" ōnBlur="javascrīpt:unitCheck(event)" descrīptor='mx=20|rq|el'><font size=2pt color=red>*</font>

<div id="txtEmail" class='STYLE1'>请输入邮箱地址</div> </td>

</tr>

<tr>

<td align="right">电话</td>

<td><input type="text" name="Phone" id="Phone" ōnBlur="javascrīpt:unitCheck(event)" descrīptor="te">

<div id="txtPhone" class='STYLE1'>请输入电话号码</div> </td>

</tr>

<tr>

<td align="right">描述</td>

<td><textarea cols="20" rows="5" name="introduce" id="introduce" ōnBlur="javascrīpt:unitCheck(event)" descrīptor="mx=20"></textarea>

<div id="txtintroduce" class='STYLE1'>请输入个人描述</div> </td>

</tr>

<tr>

<td align="right">爱好</td>

<td><input type="checkbox" name="Lovers[]" value="football" >

足球

<input type="checkbox" name="Lovers[]" value="basketball" >

篮球

<input type="checkbox" name="Lovers[]" value="badminton" >

羽毛球

<div id="txtLovers" class='STYLE1'>请选择个人爱好</div> </td>

</tr>

<tr>

<td align="right">地区</td>

<td>

<SELECT name="address" id="address" ōnBlur="javascrīpt:unitCheck(event)" descrīptor="ds=0" errormsg="必须选择地区!">

<option value="" selected>[choose yours]

<option value="010">北京

<option value="0335">秦皇岛

<option value="0315">唐山

<option value="0795">山东

</SELECT><font size=2pt color=red>*</font>

<div id="txtaddress" class='STYLE1'>请选择地区</div> </td>

</tr>

<tr>

<td align="right"></td>

<td><input type="submit" value="Submit"></td>

</tr>

</table>

</form>

<scrīpt language="Javascrīpt" type="text/javascrīpt">

//验证用户名

function testName() {

var v = document.getElementById('username');

if (v.value.trim() != 'lb') {

return false;

} else {

return true;

}

}

//验证复选框

function testCheckBox() {

var ōbjWorkPattern = document.getElementsByName("Lovers[]");

var temp = "";

for (i = 0; i < objWorkPattern.length; i++) {

if (objWorkPattern.checked) {

temp += objWorkPattern.value.trim();

}

}

if (temp.length == 0) {

return false;

} else {

return true;

}

}

//用户添加的自定义验证函数

function testCustom() {

var v1 = document.getElementById('txtusername');

var v2 = document.getElementById("txtLovers");

if (testName() == false) {

v1.className = 'STYLE2';

v1.innerHTML = '用户名填写不正确!';

document.getElementById("username").focus();

return false;

} else {

v1.className = 'STYLE1';

v1.innerHTML = '请输入用户名';

}

if (testCheckBox() == false) {

v2.innerHTML = "<div class='STYLE2'>个人爱好不能为空!</div>";

return false;

} else {

v2.innerHTML = "<div class='STYLE1'>请选择个人爱好</div>";

}

return true;

}

//定义验证类

var a_fields = {

'username':{'rq':'必填项', 'mx=5':'', 'aa':'字母'},

'Email':{'mx=20':'', 'rq':'', 'el':''},

'Phone':{'te':''},

'introduce':{'mx=20':''},

'address':{'ds=0':'必须选择地区!'}

}

html_form(a_fields, 'myform', 'testCustom');

</scrīpt>

</body>

</html>

以上代码是我通过3周的时间不断完善最终形成的(中间并不是全做这个,可能还有别的其它事情)。贴出源码的主要目的是希望php、javascrīpt高手给予批评,使这个小生命能够茁壮成长。

您可能还会对下面的文章感兴趣: