判断输入域字符长度的jQuery插件
来源:广州中睿信息技术有限公司官网
发布时间:2012/10/21 23:25:16 编辑:editor 阅读 647
半夜睡醒了,起来看会书,今天做项目的时候,顺便看了一下网站限制输入长度的实现方案,感觉看了不记下来就没有用,于是趁现在精神(神经)起床写下来。插件的官方地址http://remysharp.com/

半夜睡醒了,起来看会书,今天做项目的时候,顺便看了一下网站限制输入长度的实现方案,感觉看了不记下来就没有用,于是趁现在精神(神经)起床写下来。

插件的官方地址http://remysharp.com/2008/06/30/maxlength-plugin/

调用很简单:

  <input type="text" name="" value="" id="j-text" maxlength="100"/><span>剩余字数:<em id="j-tip-text"></em></span>  <script src="jquery1.4.4.js" type="text/javascript" charset="utf-8"></script>  <script src="maxlength.js" type="text/javascript" charset="utf-8"></script>  <script type="text/javascript" charset="utf-8">      $('#j-text').maxlength('#j-tip-text');  </script>  </body>  </html>

但是感觉这样写起来很麻烦,而且最蛋疼的是验证输入域的外围必须要有一个form标签。于是就想着改造一下,最好是直接在input里面写maxlength属性,不用去页面调用最好。

于是就插入了这么一段:

  var $tip = $('<span>剩余字数:<em></em></span>');    var $charsLeft = $tip.find('em');    $tip.insertAfter($field);

这样禁用JS的情况下就不会出现没有用的提示了,不够感觉更好的应该是把固定的长度说明提示写在后面,然后再用JS移除掉,换上动态的提示。

一个实例:

  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  <html xmlns="http://www.w3.org/1999/xhtml">  <head>      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />      <title></title>      <style type="text/css">      form{ border-top: 1px solid #e4e4e4;}      label{display: block;}      form span{ display: block;}      </style>  </head>  <body>      <form action="#" method="get" accept-charset="utf-8">          <p><label for="">input:</label>              <input type="text" name="" value="" id="j-text" maxlength="100"/>              <span>剩余字数:<em id="j-tip-text"></em></span></p>          <p><label for="">textarea:</label>              <textarea name="Name" rows="3" cols="40" id="j-area" maxlength="100"></textarea>              <span>剩余字数:<em id="j-tip-area"></em></span>              <input type="hidden" name="maxlength" value="100" id="j-area-hide"/></p>          <p><label for="">by word:</label>              <input type="text" name="" value="" id="j-word" maxlength="100"/>              <span>剩余字数:<em id="j-tip-word"></em></span></p>      </form>      <form action="#" method="get" accept-charset="utf-8">          <p><label for="">input:</label>              <input class="maxlength" type="text" name="" value="" id="j-text-1" maxlength="100"/></p>          <p><label for="">textarea:</label>              <textarea class="maxlength" name="Name" rows="3" cols="30" id="j-area-1" maxlength="100"></textarea>              <input type="hidden" name="maxlength" value="100" id="j-area-hide"/></p>      </form>      <script src="jquery1.4.4.js" type="text/javascript" charset="utf-8"></script>      <script src="maxlength.js" type="text/javascript" charset="utf-8"></script>      <script type="text/javascript" charset="utf-8">          $('#j-text').maxlength('#j-tip-text');          $('#j-area').maxlength('#j-tip-area');          $('#j-word').maxlength({              'feedback':'#j-tip-word',              'words':true          });          $('.maxlength').maxlength();      </script>  </body>  </html>

maxlength插件说明,只是标识一下改动的地方而已,改天再好好改改:

  (function ($) {    $.fn.maxlength = function (settings) {      //如果只有一个参数,就默认为现实结果的容器      if (typeof settings == 'string') {          settings = { feedback : settings };      }      //配置参数,缺少的用默认替代      settings = $.extend({}, $.fn.maxlength.defaults, settings);      //获取输入域的字符/单词个数      function length(el) {          var parts = el.value;          if ( settings.words )              parts = el.value.length ? parts.split(/\s+/) : { length : 0 };          return parts.length;      }            return this.each(function () {          var field = this,              $field = $(field),              //这一点但觉很不好,限制死了外围必须有一个form标签              $form = $(field.form),              limit = settings.useInput ? $form.find('input[name=maxlength]').val() : $field.attr('maxlength'),              $charsLeft = $form.find(settings.feedback);                    //添加的          var $tip = $('<span>剩余字数:<em></em></span>');          var $charsLeft = $tip.find('em');          $tip.insertAfter($field);                    function limitCheck(event) {              var len = length(this),                  exceeded = len >= limit,                  code = event.keyCode;                if ( !exceeded )                  return;                switch (code) {                  case 8:  // allow delete                  case 9:                  case 17:                  case 36: // and cursor keys                  case 35:                  case 37:                   case 38:                  case 39:                  case 40:                  case 46:                  case 65:                      return;                    default:                      return settings.words && code != 32 && code != 13 && len == limit;              }          }              var updateCount =
    
联系我们CONTACT 扫一扫
愿景:成为最专业的软件研发服务领航者
中睿信息技术有限公司 广州•深圳 Tel:020-38931912 务实 Pragmatic
广州:广州市天河区翰景路1号金星大厦18层中睿信息 Fax:020-38931912 专业 Professional
深圳:深圳市福田区车公庙有色金属大厦509~510 Tel:0755-25855012 诚信 Integrity
所有权声明:PMI, PMP, Project Management Professional, PMI-ACP, PMI-PBA和PMBOK是项目管理协会(Project Management Institute, Inc.)的注册标志。
版权所有:广州中睿信息技术有限公司 粤ICP备13082838号-2