指定多行文本框的最大长度

14 浏览
0 Comments

指定多行文本框的最大长度

我正在尝试使用asp:

我想要一种指定maxlength属性的方法,但显然对于多行文本框是不可能的。我一直在尝试使用一些JavaScript来处理onkeypress事件:

onkeypress="return textboxMultilineMaxNumber(this,maxlength)"
function textboxMultilineMaxNumber(txt, maxLen) {
    try {
        if (txt.value.length > (maxLen - 1)) return false;
    } catch (e) { }
    return true;
}

虽然这个JavaScript函数工作得很好,但它的问题是在写入字符之后,它不允许您删除和替换其中任何一个,这种行为是不希望的。

您有任何想法,我可以在上述代码中进行哪些可能的更改来避免这种情况,或者是否有其他方法可以绕过它?

0
0 Comments

问题:如何为多行文本框指定最大长度?

原因:多行文本框默认情况下无法直接指定最大长度,需要通过其他方法来实现。

解决方法:可以使用正则表达式验证器来解决这个问题。这样可以在客户端使用JavaScript进行验证,同时在禁用JavaScript时也可以在服务器端进行验证。以下是一个示例,检查输入的值是否在0到100个字符之间:

ControlToValidate="txtInput"

ValidationExpression="^[\s\S]{0,100}$"

ErrorMessage="Please enter a maximum of 100 characters"

Display="Dynamic">*

当然,您也可以使用更复杂的正则表达式来更好地适应您的需求。

这个解决方法唯一的问题是,当用户编辑文本将其限制在最大长度内时,错误消息不会消失,这可能会让用户感到困惑。

如果您选择使用这种解决方法,我建议在按键时触发验证,这样在用户输入时错误消息会出现并消失,具体方法可以参考这篇文章:fczaja.blogspot.co.uk/2009/07/…

为什么您使用[\s\S]而不是简单的.

我刚发现为什么(通过艰难的方式):.不匹配换行符,[\s\S]可以匹配

如果您的页面中有JavaScript,请注意可能会出现以下错误:stackoverflow.com/questions/16660900/…

0
0 Comments

问题原因:在多行文本框中,使用JavaScript限制最大长度时,由于换行符不会被计算在内,导致限制失效。

解决方法:可以使用正则表达式验证器来实现限制最大长度的功能。

文章内容如下:

在多行文本框中指定最大长度(Specifying maxlength for multiline textbox)

在使用多行文本框时,我们经常需要限制用户输入的内容的最大长度。一种常见的做法是使用JavaScript来实现这个功能。下面是一个示例的JavaScript代码:

function checkTextAreaMaxLength(textBox, e, length) {
    var mLen = textBox["MaxLength"];
    if (null == mLen)
        mLen = length;
    var maxLength = parseInt(mLen);
    if (!checkSpecialKeys(e)) {
        if (textBox.value.length > maxLength - 1) {
            if (window.event) //IE
                e.returnValue = false;
            else //Firefox
                e.preventDefault();
        }
    }
}
function checkSpecialKeys(e) {
    if (e.keyCode != 8 && e.keyCode != 46 && e.keyCode != 37 && e.keyCode != 38 && e.keyCode != 39 && e.keyCode != 40)
        return false;
    else
        return true;
}

在控件中调用此函数的示例代码如下:


此方法看起来很好,但是当用户输入换行符时,限制最大长度的功能将失效。因为JavaScript的value.length不会计算换行符的长度,但换行符实际上会增加字符串的总大小('\n'是两个字符)。如果服务器限制了字符串大小,那么每当用户使用换行符时,仍然会出现截断现象。

此外,这段代码在某些浏览器中不起作用。IE会返回正确的长度值(包括换行符),而Webkit则不会。

因此,这种方法不适用于服务器端,是一个相对较差的解决方案。更好的解决方案是使用Alex Angas提供的正则表达式验证器。这也应该是被接受的答案。

0