2012-05-29 26 views
0

输入限制,我想用下面的代码来限制输入(字母)到文本字段:对于所选择的jQuery插件

$('input').bind('keypress', function (event) { 
    var regex = new RegExp("^[a-zA-Z0-9]+$"); 
    var key = String.fromCharCode(!event.charCode ? event.which : event.charCode); 
    if (!regex.test(key)) { 
     event.preventDefault(); 
     return false; 
    } 
}); 

上面的代码在一个标准的输入栏的伟大工程,但是当我键入由Chosen生成的字段,该功能不适用。所选的插件确实生成了一个包含<input type="text">的div,但$('input')似乎没有触及它。我猜这是由于应用上述代码的时间所致。

+0

难道你不能给'你'的'输入'域的'class'属性? – Rizstien

回答

1

杰克的答案奏效。但要了解的重要一点是keypress事件会产生泡沫,因此您可以在节点层次结构上的任何位置捕获它,而不是动态生成的节点。

http://jsfiddle.net/KWv7Z/6/

$(document).bind('keypress', function (event) { 
    // Will fire for all elements, we only care for inputs 
    // Also allow navigation keypresses 
    if (event.target.tagName.toUpperCase() != "INPUT" || 
      $.inArray(event.which, [8,9,13,16,17,18,19,20,27,33,34,35,36,37,38,39,40,45,46])) { 
     return; 
    } 
    var regex = new RegExp("^[a-zA-Z0-9]+$"); 
    // jQuery already normalizes event.which 
    var key = String.fromCharCode(event.which); 
    if (!regex.test(key)) { 
     event.preventDefault(); 
     return false; 
    } 
}); 

这个,因为它并不在页面上安装每输入一个单独的处理程序也更多的内存友好。

+0

感谢您的教训胡安。真的很有价值,但它看起来像它不会做的伎俩选择输入字段=( – Abram

+0

@Abram:哪部分不工作?在前面的版本中是一个小错误,在回答中看到JSFiddle –

+0

我会在选择的插件加载的时候在家尝试这个,我尝试使用JSFiddle上的添加资源选项加载它,但无济于事。 – Abram

2

而不是.bind(),请考虑使用.on()这将适用于动态创建的元素。

+0

对不起杰克,不适合我的情况。这是关于选择作品的方式我猜:( – Abram