【发布时间】:2012-12-07 09:53:47
【问题描述】:
我必须将 TextArea 的长度限制为 2 个字符。我找到了很多答案。阅读这些答案,我已经达到了以下代码。它具有“keydown”和“keyup”的事件处理程序。
- 您认为这是否正确且足够?
- 它是否适用于所有主流浏览器?
http://jsfiddle.net/Lijo/VAYze/1/
- 注意:我不需要显示错误消息。因此,正则表达式验证对我来说不是一个好的选择。
- 注意:我正在寻找基于现有代码的答案 - 不是全新的答案
- 注意:密钥代码来自http://www.asquare.net/javascript/tests/KeyCode.html 和http://www.asquare.net/javascript/tests/KeyCode.html
更新
要将文本dragged 处理到文本区域,我没有看到 jQuery 解决方案。我打算用EnableClientScript="false" 做一个regular expression validator。它将仅在服务器端进行验证。这是为了处理绕过现有 jQuery 操作的任何内容。 ASP Regular Expression Validator for Multi-line textbox
jQuery
$(document).ready(function () {
var maxLength = 2;
$('.multiline').keydown(function (e) {
var existingText = $(this).val();
var existingLength = existingText.length;
if (existingLength >= maxLength)
{
if (maxLength > 0)
{
if (!checkSpecialKeys(e))
{
$(this).val(existingText.substring(0, maxLength));
$(this).css('color','red');
//Newly entered character not rendered since false is returned
e.preventDefault();
}
}
}
});
//To trim the text if a paste happens
$('.multiline').keyup(function (e) {
var newText = $(this).val();
var newLength = newText.length;
if (newLength > maxLength) {
if (maxLength > 0) {
$(this).val(newText.substring(0, maxLength));
$(this).css('color','red');
}
}
});
}
);
function checkSpecialKeys(e)
{
if (e.keyCode >= 48 && e.keyCode <= 90)
{
return false;
}
if (e.keyCode >= 96 && e.keyCode <= 111)
{
return false;
}
else
{
return true;
}
}
【问题讨论】:
-
输入和文本区域的值可以通过在其中拖动选定的文本来填充。不要忘记这种可能性。
-
为什么不使用 maxlenght 属性?
-
有琐碎的
dragover、dragenter和drop事件监听器,但我会坚持使用change事件,因为并非所有这些都被所有浏览器支持,而changeAFAIK无论如何都会触发。 -
@Lijo no no 我的建议是添加,而不是更改。保留您的关键事件,只需为更改事件添加一个单独的事件侦听器。
标签: jquery