2014-12-21 27 views
1

当前我在输入字段上使用keydown事件来验证30个字符的限制。当用户输入第31个字符时,验证消息出现“请输入30个字符”。但是,当我通过简单地双击文本框并按任何字母/数字来选择整个文本,然后文本不会删除,并显示消息“请输入30个字符”。我想在用户按字母/数字时删除整个文本。目前我正在使用:将输入值还原为最后一个有效字符串

$('#inputBox').live("keydown", function(event) { 

    var inputLength = $(this).val().length; 
    var boolPassValidation = false; 

    if (event.keyCode === 8) { 
     boolPassValidation = true; 
    } 


    if (inputLength >= 30 && !boolPassValidation) { 
     alert("Please enter a valid PO number, 30 characters max."); 

    } 

    return false; 
} else return true; 
}); 

任何建议将是很大的帮助。

+0

Reaso n:这是因为您在该处理程序中返回false,使jQuery停止按键的默认行为(插入键)。您的验证器被执行,但未插入字符。 –

回答

1

jsFiddle demo

取决于jQuery的v您使用,但.live()方法已(因为v.1.7和1.9移除) - 使用.on()代替:

$(document).on("input", "#inputBox", function(e) { 
    var v = this.value; 
    if (v.length > 30 && e.which!==8) { 
     alert("Please enter a valid PO number, 30 characters max."); 
     this.value = this.dataset.oldVal; 
    }else{ 
     this.dataset.oldVal = v; 
    } 
}); 

如果您要搜索的字符串长度为30个字符,则需要使用>30而不是>=30,否则您将在3 0个字符,这很好。

使用jQuery的event.which而不是键代码更好的浏览器之间的兼容性

如果#inputBox是不是比你动态生成可以简单地使用$("#inputBox").on("input", function(e) {否则尝试使用,而不是一个静态父#选择$(document)

PS:您可以额外添加maxlength=30属性到您的输入元素

+1

非常感谢你。它工作正常 – user3817749

+0

@ user3817749不客气 –

+0

C. Bulijan发生一个问题。输入30个字符后,当用户在字符串之间放置任何字符时,它将被接受。我不想在文本框中放置任何字符。当用户按删除按钮,然后它可以接受该字符,当限制达到30时,它再次应该显示一条消息。意味着输入框只接受30个字符。 – user3817749

相关问题