我们常常在前台页面做一些文本输入长度的验证,为什么呢?因为数据库字段设置了大小,如果不限制输入长度,那么写入库时就会引发字符串截断异常。今天就给大家分享一个jquery插件来解决这一问题。

 (function ($) {
$.fn.limitTextarea = function (opts) {
var defaults = {
maxNumber: , //允许输入的最大字数
position: 'top', //提示文字的位置,top:文本框上方,bottom:文本框下方
onOk: function () { }, //输入后,字数未超出时调用的函数
onOver: function () { } //输入后,字数超出时调用的函数
}
var option = $.extend(defaults, opts);
this.each(function () {
var _this = $(this);
var info = '<div id="info' + option.maxNumber + '">还可以输入<b>' + (option.maxNumber - getByteLen(_this.val())) + '</b>字符</div>';
var fn = function () {
var $info = $('#info' + option.maxNumber + '');
var extraNumber = option.maxNumber - getByteLen(_this.val()); if (extraNumber >= ) {
$info.html('还可以输入<b>' + extraNumber + '</b>个字符');
option.onOk();
} else {
$info.html('还可以输入<b>0</b>个字符');
option.onOver();
}
};
switch (option.position) {
case 'top':
_this.before(info);
break;
case 'bottom':
default:
_this.after(info);
}
//绑定输入事件监听器
if (window.addEventListener) { //先执行W3C
_this.get().addEventListener("input", fn, false);
} else {
_this.get().attachEvent("onpropertychange", fn);
}
if (window.VBArray && window.addEventListener) { //IE9
_this.get().addEventListener("onkeydown", function () {
var key = window.event.keyCode;
(key == || key == ) && fn(); //处理回退与删除
});
_this.get().addEventListener("oncut", fn); //处理粘贴
}
});
}
function getByteLen(val) {
var len = ;
for (var i = ; i < val.length; i++) {
if (val[i].match(/[^\x00-\xff]/ig) != null) //全角
len += ;
else
len += ;
}
return len;
}
function getByteVal(val, max) {
var returnValue = '';
var byteValLen = ;
for (var i = ; i < val.length; i++) {
if (val[i].match(/[^\x00-\xff]/ig) != null)
byteValLen += ;
else
byteValLen += ;
if (byteValLen > max)
break;
returnValue += val[i];
}
return returnValue;
}
})(jQuery)

48行以下,我的同事添加了两个函数,其实这么写有点奇怪,我们完全可以采用函数表达式的写法。比如:

  this.getByteLen= function(val) {
var len = ;
for (var i = ; i < val.length; i++) {
if (val[i].match(/[^\x00-\xff]/ig) != null) //全角
len += ;
else
len += ;
}
return len;
}

不过需要注意的一点是,此定义形同变量定义,要写到被调用代码之前。不过这就牵扯到了“闭包”等一系列概念,我们以后再讨论。

再看看这个插件如何使用:

  $('#Remarks').limitTextarea({
maxNumber: , //最大字数
position: 'bottom', //提示文字的位置,top:文本框上方,bottom:文本框下方
onOk: function () {
$('#Remarks').css('background-color', 'white');
}, //输入后,字数未超出时调用的函数
onOver: function () {
var value = $('#Remarks').val(); $('#Remarks').val(getByteVal(value, )); }
});

经实践,用起来还不错,特此推荐。

如上图,13个汉字,26个字节,数据库名称限制是28个字节。

js文本框字符数输入限制的更多相关文章

  1. js统计文本框剩余可输入字数

    js统计文本框剩余可输入字数 <html><head runat="server"> <title></title> <scr ...

  2. js控制文本框仅仅能输入中文、英文、数字与指定特殊符号

    JS 控制文本框仅仅能输入数字 <input onkeyup="value=value.replace(/[^0-9]/g,'')"onpaste="value=v ...

  3. [js开源组件开发]js文本框计数组件

    js文本框计数组件 先上效果图: 样式可以自行调整 ,它的功能提供文本框的实时计数,并作出对应的操作,比如现在超出了,点击下面的按钮后,文本框会闪动两下,阻止提交.具体例子可以点击demo:http: ...

  4. python开发_tkinter_获取文本框内容_给文本框添加键盘输入事件

    在之前的blog中有提到python的tkinter中的菜单操作 python开发_tkinter_窗口控件_自己制作的Python IDEL_博主推荐 python开发_tkinter_窗口控件_自 ...

  5. [HTML] 使用size和maxlength分别控制文本框宽度和输入字符数的限制

    ① size一般可以直观的看到,就是文本框的宽度,只能决定文本框的宽度,也就是可以看到的字符的个数. 如:size="5"  这意味着如果输入  我的国家是北京 那么只能看见  我 ...

  6. JS添加删除一组文本框并对输入信息加以验证

    在做项目中遇到这样一个问题,就是我们需要添加几组数据到数据库,但是具体几组数据不确定,有客户来填写,比如我们需要添加打折策略,可能个策略有很多组方案,比如“满100打5折,满200打4折,满500打3 ...

  7. JS文本框输入限制

    1上面的文本框只能输入数字代码(小数点也不能输入): CODE: <input onkeyup="this.value=this.value.replace(/\D/g,'')&quo ...

  8. js怎么限制文本框input只能输入数字

    1.说明 本篇文章介绍怎么使用js限制文本框只能输入数字 2.HTML代码 <!DOCTYPE html> <html xmlns="http://www.w3.org/1 ...

  9. js限制文本框input只能输入数字

    JS判断只能是数字和小数点. ,文本框只能输入数字代码(小数点也不能输入) 复制代码 代码示例:<input onkeyup="this.value=this.value.replac ...

随机推荐

  1. python requests库学习笔记(下)

    1.请求异常处理 请求异常类型: 请求超时处理(timeout): 实现代码: import requestsfrom requests import exceptions        #引入exc ...

  2. Shiro笔记--shiroFilter权限过滤

    1.shiro中shiroFilter中的一些配置页面的过滤权限 <!--名字必须和web.xml里面的filter-name一样--> <bean id="shiroFi ...

  3. Web API 之承载宿主IIS,SelfHost,OwinSelfHost

            Asp.Net WebAPI这个大家应该都不陌生,在我的理解范围中就是数据提供和交换的一个方式,相比与WCF,WS而言,更加的简单轻量,但是在部署web Api的时候,一般往往需要与a ...

  4. Mysql 远程登录及常用命令

    第一招.mysql服务的启动和停止 net stop mysql net start mysql 第二招.登陆mysql 语法如下: mysql -u用户名 -p用户密码 键入命令mysql -uro ...

  5. Yii2-admin的详细使用教程

    Yii2-admin的详细使用教程 参考:http://www.yiichina.com/tutorial/571    http://www.kancloud.cn/curder/yii/24775 ...

  6. Egret学习笔记 (Egret打飞机-9.子弹对敌机和主角的碰撞)

    运行起来,虽然主角飞机和敌机都在互相发射子弹,但是子弹打中了就和没打中效果是一样的.. 这一章我们就来处理子弹和飞机的碰撞问题. 我们所有的操作都是基于Main这个容器来做的.所以我就把这个处理放到M ...

  7. python_crawler,批量下载文件

    这个第一个python3网络爬虫,参考书籍是<python网络数据采集>.该爬虫的主要功能是爬取某个网站,并将.rar,.doc,.docx,.zip文件批量下载. 后期将要改进的是,用后 ...

  8. 图论4——探索网络流的足迹:Dinic算法

    1. 网络流:定义与简析 1.1 网络流是什么? 网络流是一种"类比水流的解决问题方法,与线性规划密切相关"(语出百度百科). 其实,在信息学竞赛中,简单的网络流并不需要太高深的数 ...

  9. 自己编写的仿京东移动端的省市联动选择JQuery插件

    概述 什么是插件,插件就是即插即用叫插件,很少的配置,很少的代码就可以用都项目里,之所以做这个插件,是因为做了一个省市区的联动,其他项目如果要用怎么办,难道在ctrl+c,ctrl+v?那样做太low ...

  10. CentOS下iptables持久化

    iptables规则持久化 设定防火墙规则 iptables -A INPUT -s 1.1.1.1/32 -p tcp -m tcp --dport 22 -j DROP iptables -A I ...