在使用javascript.net键入和粘贴时限制文本框中的字符
以下是场景: 我试图显示指示“XY字符左”,并将texbox中的字符限制为用户类型。我也有多行Tebox,所以MaxLength并不总是适合我(别担心,我也在服务器端检查) 以下是我学到的:onkeyup与此功能完美配合:在使用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
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;
}
}