<input type="text" onpropertychange="vvv(this.value)" id="dd" />
<script type="text/javascript">
  function vvv(v) {
    if(!isNaN(parseInt(v,10))) {
      alert(v);
    } else {
      alert("非数字")
    }
  }
</script>
如果判断后为非0-9正整数(我上面的代码没实现这功能,顺便问一下如何判断输入的数据只限定在0-9的整数),那该如何让当前输入的数据不显示,但之前输入的正常显示呢??
比如,我想输入100,是可以正常显示的,但是如果我想输入100d的话,则应该在第4次输入d的时候提示"非数字",然后input框中显示的只是100,而不是100d

解决方案 »

  1.   

    试试<input type="text" onpropertychange="vvv(this.value,this)" id="dd" />
    <script type="text/javascript">
      function vvv(v,o) {
        if(!isNaN(parseInt(v,10))) {
          alert(v);
        } else {
          alert("非数字")
          o.value=o.value.replace(/\D+/,'')
        }
      }
    </script>
      

  2.   

    不行...前面输入数字,然后后面输入非数字的话,依然显示在input框
    而且...如果第一次就输入非数字的话,则alert一直显示,除非把IE的进程kill掉
      

  3.   

    但这样就无法判断用复制数值直接粘贴的情况了啊...
    而且这样的话,下面的代码如果改成onkeypress的话,当输入非数字的时候还是会显示非数字,但是再输入非数字就无法输入,除非输入数字,当输入数字的时候则会把当前的非数字替换掉<html>
    <body>
    <input type="text" onpropertychange="vvv(this)" id="dd" />
    <script type="text/javascript">
      function vvv(o) {
          o.value=o.value.replace(/\D+/,'');
      }
    </script>
    </body>
    </html>
    这样虽然可以让非数字无法输入,但是每次触发onpropertychange事件都会弹出“Stack overflow at line:0”提示(应该是replace方法触发了onpropertychange事件导致的)