我想使用以下代码将输入(到字母数字)限制为文本字段:
$('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 :(得分:2)
请考虑使用.on()
代替.bind()
,而{{3}}适用于动态创建的元素。
答案 1 :(得分:1)
杰克的回答有效。但重要的是要理解的是,按键事件会冒泡,因此您可以在节点层次结构的任何位置捕获它,而不是动态生成的节点。
$(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;
}
});
这也更加内存友好,因为它不会在页面上为每个输入安装单独的处理程序。