2011-06-10 74 views
2

这里是我的代码,它使用asp.net AJAX客户端库添加事件处理程序允许某些码键通过数字文本框的按键,keyup事件

function IsDigit(id) { //short variable,args name for best minification 
    if ($get(id)) { 
     var v = function (e) { 
       var r = /\d/; 
       if (!r.test(String.fromCharCode(e.keyCode))) e.preventDefault(); 
      } 
     $addHandlers($get(id), { 
      keydown: v 
     }); 
    } 
} 

$get(ID)获取与ID控制 $addHandlers添加事件处理程序来控制。在这里,我将它附加到ID为id的控件上。这一切都很好,文本框只接受数字输入,但问题是他想删除所有数字并想输入其他数字。所以像[SHFT + HOME]然后删除,[删除]不起作用。请有人可以更好地完善代码。也就是这样的工作 我做这个暂时解决了它的KEYDOWN最优的,但这的确让意外的字符短暂第二则相反删除它

function IsDigit(id) { //short variable,args name for best minification 
    if ($get(id)) { 
     var p = ""; 
     var v = function (e) { 
       var r = /^\d*$/; 
       if (r.test(this.value)){p = this.value;} else {this.value=p;}// e.preventDefault(); 
      } 
     $addHandlers($get(id), { 
      keyup: v 
     }); 
    } 
} 
+0

你能想澄清什么允许输入字段包含?它是否只包含数字数据? – 2011-06-16 13:02:07

+0

@Ioxley是只有数字数据 – Deeptechtons 2011-06-21 04:10:21

回答

0

比试图做您的验证onkeydown/onkeyup你可能会发现它更容易验证onblur。这样,您不必担心某人可能用于选择/删除/重新键入文本的各种组合键,例如ctrl +方向键,ctrl + v粘贴文本,ctrl + a选择全部。

你总是可以使用新的HTML5 <input type="number">来限制输入,然后用Modernizr添加事件处理程序的代码对于不支持新的输入类型的浏览器:

if (Modernizr.inputtypes.number) { 
    ... 
    // Add your code in here 
    ... 
}  
+0

增加额外的3行50K是一个带宽豪猪,+更无用的代码 – Deeptechtons 2011-06-21 08:28:24