本文目录一览:
js中怎样控制不满足条件时不让键盘输入
最经典的实现字符数控制的方案
当我们在ASP.NET开发时,经常会遇到一个头疼的问题:字符数的控制
由于数据库的字段长度是固定的,因此在进行字符输入时,最关键的就是控制字符的个数不能超过字段的长度,要不然,一个个异常会让人疯掉的。
对于单行文本框,不管是HTML控件还是Web控件,我们经常会使用MaxLength来控制,但这种控制无法控制到中文字符,即MaxLength=50的控制,可以输入50个英文与50个中文,这样的话,还是会导致中文字符数的溢出。
对于多行文本框,那就更惨了,使用MaxLenth根本不起作用的。
下面提供的方案优势:
1)最佳的方法是在文本框中输入时,控制到最大字数,超过时不能进行输入;
2)对于粘帖的情况也要能兼容,以前网上的方法不能控制到paste的情况;
3)对于最后的一个中文字符,宁愿舍去也不能多一个字符,比如50的字符数,在第49个时,最后输入一个中文,会导致最终字数为51,而这种情况,推荐是不能输入中文,保证最终的字符数=50最佳,因为放弃一个中文字符总比数据库报错要好吧。
4)为了提高开发效率,尽可能的减少代码量,此方案不需要为文本框添加任何事件,而是由脚本块自己解决,因此只需要把脚本块饮包含到页面中就可以了,这应该是相当方便了吧
完善版修改:由于前一个方案中,一些输入法无法激活onpress事件,导致对于中文的不支持,现在采用onkeyup事件处理,在处理方式上也进行了修改,原来的onpress事件是进行输入控制,而onkeyup只能对已经输入后的字数进行字数判断,过长的进行截短处理。
在原方案中,有位朋友指出:数据采用n(type)系统不会报错,是的,如果采用n(type)的话,是以字符为基础的,可以不考虑数据库出错的可能性,但同样也存在一个界面显示的问题,比如界面上的Address值,希望是100个字符,如果不进行中英文字数区分,最多将输入100个中文,从而占200 个字节空间,导致Adress在显示时会超过预料的空间,界面搞得不易控制。因此,此方案还是有可取之处的。
具体新方案实现:
1)将以下的代码包含到页面中:
script language="javascript"
!--
String.prototype.len=function(){
return this.replace(/[^/x00-/xff]/g,"**").length;
}
//Set maxlength for multiline TextBox
function setMaxLength(object,length)
{
var result = true;
var controlid = document.selection.createRange().parentElement().id;
var controlValue = document.selection.createRange().text;
var tempString=object.value;
var tt="";
for(var i=0;ilength;i++)
{
if(tt.len()length)
tt=tempString.substr(0,i+1);
else
break;
}
if(tt.len()length)
tt=tt.substr(0,tt.length-1);
object.value=tt;
}
//Check maxlength for multiline TextBox when paste
function limitPaste(object,length)
{
var tempLength = 0;
if(document.selection)
{
if(document.selection.createRange().parentElement().id == object.id)
{
tempLength = document.selection.createRange().text.len();
}
}
var tempValue = window.clipboardData.getData("Text");
tempLength = object.value.len() + tempValue.len() - tempLength;
if (tempLength length)
{
tempLength -= length;
var tt="";
for(var i=0;itempValue.len()-tempLength;i++)
{
if(tt.len()(tempValue.len()-tempLength))
tt=tempValue.substr(0,i+1);
else
break;
}
if(tt.len()=0)
{
window.event.returnValue=false;
}
else
{
tempValue=tt;
window.clipboardData.setData("Text", tempValue);
window.event.returnValue = true;
}
}
}
function PressLength()
{
if(event.srcElement.type=="text" || event.srcElement.type=="textarea" )
{
if(event.srcElement.length!=null)
setMaxLength(event.srcElement,event.srcElement.length);
}
}
function LimitLength()
{
if(event.srcElement.type=="text" || event.srcElement.type=="textarea" )
{
if(event.srcElement.length!=null)
limitPaste(event.srcElement,event.srcElement.length);
}
}
document.documentElement.attachEvent('onkeyup', PressLength);
document.documentElement.attachEvent('onpaste', LimitLength);
//--
/script
2)在需要控制的控件上添加length="n"(n为要控制的字数)即可,如:
INPUT type="text" length="3" TEXTAREA length="20" rows="2" cols="20"/TEXTAREA asp:TextBox id="TextBox1" runat="server" length="7"/asp:TextBox asp:TextBox id="TextBox2" runat="server" TextMode="MultiLine" length="10"/asp:TextBox 上面是HTML控件与Web控件的例子,只要加一个length就可以了。
个人建议:1)可以把这个脚本块放在js文件中,进行引用即可
2)可以把脚本放在BasePage中,这样每个页面都可以使用了
3)可以使用这些脚本块,开发专门的服务器端控件。
如何禁止js表单输入主键盘0-9上面的符号。
总结起来,用户有 4 种方法可以输入被禁止的符号:
1、键盘 Shit + [1-0]
2、键盘 Ctrl + V
3、鼠标右键 - 粘贴
4、第三方工具,例如 Firebug 直接修改 DOM
所以要为每一个可能性写相应的代码。下面代码中假设文本框 ID 为 my_text。
window.onload = function() {
// 获取元素
var ele = document.getElementById("my_text");
// 此函数将 1-0 数字上面的符号全部替换掉
function checkInput(ele) {
var regex = /[\!@#\$%\^\*\(\)_\+]+/g;
if(ele.value.length regex.test(ele.value)) {
ele.value = ele.value.replace(regex, '');
}
}
// 当 shift 和 1-0 被按下时,return false
ele.onkeydown = function(e) {
e = e || window.event;
var k = (typeof e.which == "number") ? e.which : e.keyCode;
if(e.shiftKey k = 48 k = 57) {
return false;
}
};
// 当 ctrl + v 被按下时,调用 checkInput 函数
ele.onkeyup = function(e) {
e = e || window.event;
var k = (typeof e.which == "number") ? e.which : e.keyCode;
if(e.ctrlKey k == 86) {
checkInput(ele);
}
};
// 当用户使用右键进行粘贴后 或 当内容发生改变时
// 相当于 onblur,调用 checkInput 函数
ele.onchange = function() {
checkInput(ele);
};
};
如何用js 代码禁用键盘某个按键
form
input type="text" id="NotInputS" /
/form
script
document.getElementById("NotInputS").onkeypress=function(e){
var keynum=window.event ? e.keyCode : e.which; //获取键盘码
var keychar = String.fromCharCode(keynum);//获取键盘吗对应的字符
alert(keynum);
if(keychar=='S' || keychar=='s')//这个实例不能输出S,s
return false;//返回false表示不输出此字符
else
return true;//true就是输出
};
//请用onkeypress,不要用onkeydown/onkeyup
//除非你不在意字母的大小写
//onkeydown的S与s的按键码是一样的
/script