如下代码,我想实现在输入框输入数字后,如果小于某个值,则再添加一个输入框,并且新的输入框获取焦点
如果在onkeydown中不触发onchange中的事件的话,则焦点会跳过新出现的输入框
但是如果在onkeydown中触发了onchange中的事件,则会造成onchange中的事件被调用了2次
有什么办法可以实现我想要的功能呢??
<html>
  <head>
    <meta http-equiv = "Content-Type" content = "text/html; charset = UTF-8" />
    <script type="text/javascript" language="javascript">
      function myKeyDown(e) {
        var key = window.event.keyCode;
        if((key === 13 || key === 108) && validNum(e.srcElement)) {
          window.event.keyCode = 9;
        }
      }      function validNum(obj) {
        var v = parseInt(obj.value, 10);
        if(!isNaN(v) && v > 0 && v < 12) {
          var tb = obj.parentNode.parentNode.parentNode;  //tbody
          var row = obj.parentNode.parentNode.rowIndex;
          var newRow = tb.rows[row].cloneNode(true);
          newRow.firstChild.firstChild.value = "";
          tb.appendChild(newRow);
          return true;
        } else {
          alert("请输入1~12之间的正整数!");
          obj.value = "";
          return false;
        }
      }
      window.onload = function() {
        document.getElementsByTagName("input")[0].focus();
      };
    </script>
  </head>
  <body>
    <table>
      <tbody>
        <tr>
          <td>
            <input type="text" onkeydown="myKeyDown(event)" onchange="return validNum(this)" />
          </td>
        </tr>
      </tbody>
      <tfoot>
        <tr>
          <td>
            <input type="button" value="Sbumit" onclick="alert('提交')" />
          </td>
        </tr>
      </tfoot>
    </table>
  </body>
</html>

解决方案 »

  1.   

    目前修改成这样,算是可以了
    <html>
      <head>
        <meta http-equiv = "Content-Type" content = "text/html; charset = UTF-8" />
        <script type="text/javascript" language="javascript">
          function validNum(obj) {
            var v = parseInt(obj.value, 10);
            if(!isNaN(v) && v > 0 && v < 12) {
              var tb = obj.parentNode.parentNode.parentNode;  //tbody
              var row = obj.parentNode.parentNode.rowIndex;
              var newRow = tb.rows[row].cloneNode(true);
              newRow.firstChild.firstChild.value = "";
              tb.appendChild(newRow);
              return true;
            } else {
              alert("请输入1~12之间的正整数!");
              obj.value = "";
              return false;
            }
          }      function myKeyDown(e) {
            var key = window.event.keyCode;
            if((key === 13 || key === 108) && validNum(e.srcElement)) {
              window.event.keyCode = 9;
              e.srcElement.onchange = "";
            } else {
              if(!e.srcElement.onchange) {
                e.srcElement.onchange = new Function("validNum(this)");
              }
            }
          }      window.onload = function() {
            document.getElementsByTagName("input")[0].focus();
          };
        </script>
      </head>
      <body>
        <table>
          <tbody>
            <tr>
              <td>
                <input type="text" onkeydown="myKeyDown(event)" />
              </td>
            </tr>
          </tbody>
          <tfoot>
            <tr>
              <td>
                <input type="button" value="Sbumit" onclick="alert('提交')" />
              </td>
            </tr>
          </tfoot>
        </table>
      </body>
    </html>
      

  2.   


    function myKeyDown(e) {
           var event = e || window.event;
           var key= event.keyCode || event.which || event.charCode;//兼容浏览器
      

  3.   

    ...........这个我知道啦...因为window.event.keyCode = 9在FF下无法使用,必须通过focus()来实现,为了精简代码,所以我没把浏览器兼容的代码帖出来...