ie9以下 用事件委托来管理onchange事件不能触发onchange事件,其他浏览器正常

实现类似自动换焦点的功能 ,刚开始想用的是委托事件给form表单添加onchange事件但是ie9以下不能触发onchange事件。
原始代码
js部分
case "change":
target.value.length == target.maxLength ? target.parentNode.lastChild.className = "fa fa-check" : target.parentNode.lastChild.className = "";
break;
原始全代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<!--<link rel="stylesheet" type="text/css" href="http://apps.bdimg.com/libs/fontawesome/4.4.0/css/font-awesome.css" />-->
<link rel="stylesheet" type="text/css" href="font-awesome-4.7.0/css/font-awesome.css" />
</head>
<body>
<textarea id="box" contenteditable style="width: 100px;height: 100px;border: 1px solid black; word-break:break-all;overflow: auto;resize: none;">
</textarea>
<form action="" method="post">
<table>
<tr>
<td><input type="text" name="text1" maxlength="3" autofocus tabindex="-1" /><i style='color:green'></i></td>
</tr>
<tr>
<td><input type="text" name="text2" maxlength="3" /><i style='color:green'></i></td>
</tr>
<tr>
<td><input type="text" name="text3" maxlength="4" /><i style='color:green'></i></td>
</tr>
<tr>
<td>
<select name="location">
<option value="a">a</option>
<option value="b">b</option>
<option value="c">c</option>
</select>
</td>
</tr>
<tr>
<td><input type="submit" id="btn" value="点击" /></td>
</tr>
</table>
</form>
<script src="js/Base.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
var base = new Base();
var form = document.forms[0];
var txt = form.elements[0];
window.onload = function() {
txt.focus();
};
var fn = function(event) {
event = base.getEvent(event);
var target = base.getTarget(event);
var hasFocus = document.hasFocus() &&
document.activeElement === target;
console.log(document.activeElement.name)
switch(event.type) {
case "keypress":
base.tabForward(event);
base.forBiddenInput(form, event, true);
break;
case "paste":
base.forBiddenPaste(event, true);
break;
case "change":
target.value.length == target.maxLength ? target.parentNode.lastChild.className = "fa fa-check" : target.parentNode.lastChild.className = "";
break;
}
}
form.onkeypress = fn;
form.onpaste = fn;
form.onchange = fn;
</script>
</body>
</html>
修改后的代码,只能将form的每个input字段都添加onchange事件。这样ie9以下没问题。
js核心代码
var txts = form.elements["text"];
for(var i = 0; i < txts.length; i++) {
txts[i].onchange = function(event) {
event = base.getEvent(event);
var target = base.getTarget(event);
target.value.length == target.maxLength ? target.parentNode.lastChild.className = "fa fa-check" : target.parentNode.lastChild.className = "";
}
}
修改后的代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" type="text/css" href="4.2.0/css/font-awesome.css" />
<!--[if IE 7]> <link rel="stylesheet" href="4.2.0/css/font-awesome-ie7.min.css"> <![endif]-->
</head>
<body>
<form action="" method="post">
<table>
<tr>
<td><input type="text" name="text" maxlength="3" autofocus tabindex="-1" /><i style='color:green'></i></td>
</tr>
<tr>
<td><input type="text" name="text" maxlength="3" /><i style='color:green'></i></td>
</tr>
<tr>
<td><input type="text" name="text" maxlength="4" /><i style='color:green'></i></td>
</tr>
</table>
</form>
<script src="js/Base.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
var base = new Base();
var form = document.forms[0];
var txt = form.elements[0];
window.onload = function() {
txt.focus();
};
var fn = function(event) {
event = base.getEvent(event);
switch(event.type) {
case "keypress":
base.tabForward(event);
base.forBiddenInput(form, event, true);
break;
case "paste":
base.forBiddenPaste(event, true);
break;
}
}
form.onkeypress = fn;
form.onpaste = fn;
var txts = form.elements["text"];
for(var i = 0; i < txts.length; i++) {
txts[i].onchange = function(event) {
event = base.getEvent(event);
var target = base.getTarget(event);
target.value.length == target.maxLength ? target.parentNode.lastChild.className = "fa fa-check" : target.parentNode.lastChild.className = "";
}
}
</script>
</body>
</html>
Base.js是我自行封装的代码,若需要可以联系我!!