在使用javascript.net键入和粘贴时限制文本框中的字符

在使用javascript.net键入和粘贴时限制文本框中的字符,javascript,jquery,asp.net,copy-paste,typing,Javascript,Jquery,Asp.net,Copy Paste,Typing,以下是场景: 我试图显示指示“XY字符左”,并将texbox中的字符限制为用户类型。我也有多行Tebox,所以MaxLength并不总是适合我(别担心,我也在服务器端检查) 以下是我学到的:onkeyup与此功能完美配合: function LimtCharacters(txtMsg, CharLength, indicator) { chars = txtMsg.value.length; document.getElementById(indicator).innerHTML = CharL

以下是场景:

我试图显示指示“XY字符左”,并将texbox中的字符限制为用户类型。我也有多行Tebox,所以MaxLength并不总是适合我(别担心,我也在服务器端检查)

以下是我学到的:onkeyup与此功能完美配合:

function LimtCharacters(txtMsg, CharLength, indicator) {
chars = txtMsg.value.length;
document.getElementById(indicator).innerHTML = CharLength - chars;
if (chars > CharLength) {
    txtMsg.value = txtMsg.value.substring(0, CharLength);
}
}
但是,我还需要检测粘贴的值。若用户使用CTRL+V,这是可以的,但若用户使用鼠标粘贴,则这不起作用。 我了解到,在这种情况下,我们需要延迟(此处):

因此,我更新(添加了onPaste事件)如下:

/* FUNCTION THAT LIMITS INSERTED CHARACTERS IN TEXTBOX */

function LimtCharacters(txtMsg, CharLength, indicator) {
chars = txtMsg.value.length;
document.getElementById(indicator).innerHTML = CharLength - chars;
if (chars > CharLength) {
    txtMsg.value = txtMsg.value.substring(0, CharLength);
}
}

/* Delay is needed if user uses paste with mouse (right click and paste). After delay same function (LimtCharacters) can be called*/
function pasted(txtMsg, CharLength, indicator) {
setTimeout(function () {
    LimtCharacters(txtMsg, CharLength, indicator);
}, 10);
}
ASPX文件中的标记:

<asp:TextBox ID="tbTitle" runat="server" ClientIDMode="Static" MaxLength="255" 
                onKeyup="LimtCharacters(this,255,'lblTitleCount')"
                onPaste="pasted(this,255,'lblTitleCount')" />

<asp:Label ID="lblTitleCount" Text="255" runat="server" ClientIDMode="Static" />

lblTitle是显示“字符左”值的标签

它在FireFox和Chrome中工作得非常完美。但它在IE中不起作用

我做错了什么

我正在使用VisualStudio2010.net

任何提示/帮助都将不胜感激;)


$(文档).ready(函数(){
$(“#tbTitle”)。关于(“输入”,函数(){
LimtCharacters(这个,255,“lblTitleCount”);
});
});               
//用于限制文本框中插入字符的函数
函数LimtCharacters(txtMsg、CharLength、指示符){
chars=txtMsg.value.length;
document.getElementById(指示符).innerHTML=CharLength-chars;
如果(字符>字符长度){
txtMsg.value=txtMsg.value.substring(0,CharLength);
//文本框中的文本已修剪,请将指示符值重新设置为0
document.getElementById(指示符).innerHTML=0;
}
}

您可以使用
输入
事件,而不是
粘贴
键控
。例如,我试过这个,它在IE中也有效。标记为答案。谢谢不要忘了在TextBox上设置clientMode=“Static”,这样才能工作!
<script type="text/javascript">
    $(document).ready(function () {
        $("#tbTitle").on("input", function () {
            LimtCharacters(this, 255, 'lblTitleCount');
        });
    });               
</script>


//FUNCTION THAT LIMITS INSERTED CHARACTERS IN TEXTBOX 

function LimtCharacters(txtMsg, CharLength, indicator){
    chars = txtMsg.value.length;
    document.getElementById(indicator).innerHTML = CharLength - chars;
    if (chars > CharLength) {
        txtMsg.value = txtMsg.value.substring(0, CharLength);
        //Text in textbox was trimmed, re-set indicator value to 0
        document.getElementById(indicator).innerHTML = 0;
    }
}