选择jquery插件的输入限制

时间:2012-05-29 06:52:18

标签: javascript 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')似乎无法触及它。我猜这是由于应用上述代码的时间......

2 个答案:

答案 0 :(得分:2)

请考虑使用.on()代替.bind(),而{{3}}适用于动态创建的元素。

答案 1 :(得分:1)

杰克的回答有效。但重要的是要理解的是,按键事件会冒泡,因此您可以在节点层次结构的任何位置捕获它,而不是动态生成的节点。

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;
    }
});

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