注意:此实例需要引入jquery文件
请输入拆案份数:
| 户数 | 比例 | |
|---|---|---|
| % |
需求介绍:在上面的input框中输入拆分的份数,点击确定,下边的table中tbody显示与输入数字对应的行数。在分案总数一定的情况下,在“户数”栏填写户数,“比例栏”自动显示占分按总数的比例,反之亦然。
逻辑分析:输入拆分份数(input的value)>点击确定>循环>dom操作生成新的tr(tr中包含的两个input在id或者class类名中一定要有有别于其他,但一定要一致的部分)>tr中的input(第一个)发生onchange时间的时候(注:输入必须为大于0的数字),计算当前输入数目占总数的比例>将所得比例赋值给input(第二个);
这个需求本身的难点在于,在一组而且是不固定数目的input中每次onchange的时候,如果用this或者$(this)来获取事件源,由于this会一直冒泡到window,显示的事件源即为window,不能实现onchange事件的来源定位,而event.target(或event.srcElement)没有冒泡,可以实现准确定位事件源,所以这里要用event.target(或event.srcElement),因为是在jquery中,所以写为$(event.target)||$(event.srcElement)
html部分:
1 | <span>请输入拆分份数:</span> |
js部分:
dom生成tbody部分,代码如下:
1 | function SplitFraction(){ |
假设:分案总额为100,即:
1 | var jiashuju = 100; |
input发生onchange事件时:
如果是“户数”栏里的input(注:id为hNum+(i+1)),执行函数为:changeValue(event),代码如下:
1 | function changeValue(event){ |
如果是“比例”栏里的input(注:id为Proportion+(i+1)),执行函数为:changeNum(event),代码如下:
1 | function changeNum(event){ |
本案例考察的知识点有:onchange事件,string拼接,dom操作,substring字符串截取,事件冒泡,获取事件源,event.target与event.srcElement的兼容性。
event.target与event.srcElement的使用范围:
IE下,event对象有srcElement属性,但是没有target属性;Firefox下,event对象有target属性,但是没有srcElement属性.但他们的作用是相当的,即:
firefox 下的 event.target = IE 下的 event.srcElement
解决方法:使用obj(obj = event.srcElement ? event.srcElement : event.target;)来代替IE下的event.srcElement或者Firefox下的event.target.

