ie9以下onchange事件不能触发的问题

2018-1-6 23:03:12 2,882 views

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是我自行封装的代码,若需要可以联系我!!

0

分享到微信朋友圈

打开微信,点击底部的“发现”,
使用“扫一扫”即可将网页分享至朋友圈。