maxlength.js源码

 1 /*
 2   @author: Terry
 3   @params:
 4     feedback - the selector for the element that gives the user feedback. Note that this will be relative to the form the plugin is run against.
 5     hardLimit - whether to stop the user being able to keep adding characters. Defaults to true.
 6     useInput - whether to look for a hidden input named ‘maxlength‘ instead of the maxlength attribute. Defaults to false.
 7     words - limit by characters or words, set this to true to limit by words. Defaults to false.
 8   @license:
 9   @version: 1.2
10   @changes: code tidy via Ariel Flesler and fix when pasting over limit and including \t or \n
11 */
12
13 (function ($) {
14
15 $.fn.maxlength = function (settings) {
16
17     if (typeof settings == ‘string‘) {
18         settings = { feedback : settings };
19     }
20
21     settings = $.extend({}, $.fn.maxlength.defaults, settings);
22
23     function length(el) {
24         var parts = el.value;
25         if ( settings.words )
26             parts = el.value.length ? parts.split(/\s+/) : { length : 0 };
27         return parts.length;
28     }
29
30     return this.each(function () {
31         var field = this;
32         var    $field = $(field);
33         var $form = $(field.form);
34         var    limit = settings.useInput ? $form.find(‘input[name=maxlength]‘).val() : $field.attr(‘maxlength‘);
35         var    $charsLeft = $form.find(settings.feedback);
36
37         function limitCheck(event) {
38             var len = length(this);
39             var exceeded = len >= limit;
40             var code = event.keyCode;
41             if (!exceeded )
42                 return;
43
44                 switch (code) {
45                     case 8:  // allow delete  BackSpace BackSpace
46                     case 9:  // Tab Tab
47                     case 17: // Next
48                     case 36: // Home
49                     case 35: // End
50                     case 37: //
51                     case 38: //Up Arrow
52                     case 39: //Right Arrow
53                     case 40: //Dw Arrow
54                     case 46: //~
55                     case 65: //A
56                         return;
57
58                     default:
59                         return settings.words && code != 32 && code != 13 && len == limit;
60                 }
61         }
62
63
64         var updateCount = function () {
65             var len = length(field);
66             var diff = limit - len;
67
68             $charsLeft.html( diff || "0" );
69
70             // truncation code
71             if (settings.hardLimit && diff < 0) {
72                 field.value = settings.words ?
73                     // split by white space, capturing it in the result, then glue them back
74                     field.value.split(/(\s+)/, (limit*2)-1).join(‘‘) :
75                     field.value.substr(0, limit);
76
77                 updateCount();
78             }
79         };
80         $field.keyup(updateCount).change(updateCount);
81         if (settings.hardLimit) {
82             $field.keydown(limitCheck);
83         }
84
85         updateCount();
86     });
87 };
88
89 $.fn.maxlength.defaults = {
90     useInput : false,
91     hardLimit : true,
92     feedback : ‘.charsLeft‘,
93     words : false
94 };
95
96 })(jQuery);
时间: 2024-11-08 22:47:46

maxlength.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-Typ

MVVM架构~knockoutjs系列之从Knockout.Validation.js源码中学习它的用法

说在前 有时,我们在使用一个插件时,在网上即找不到它的相关API,这时,我们会很抓狂的,与其抓狂,还不如踏下心来,分析一下它的源码,事实上,对于JS这种开发语言来说,它开发的插件的使用方法都在它的源码里,只要你踏下心去看,一切就都有了! Knockout.Validation.js是为Knockout插件服务的,它可以为Knockout对象进行验证,就像你使用MVC模型验证 一样,而这种绑定的验证方式对于开发人员来说是很容易接受的,也是一种趋势,它在验证过程中,会将出现异常的点记录下来,然后在

MVVM大比拼之vue.js源码精析

VUE 源码分析 简介 Vue 是 MVVM 框架中的新贵,如果我没记错的话作者应该毕业不久,现在在google.vue 如作者自己所说,在api设计上受到了很多来自knockout.angularjs等大牌框架影响,但作者相信 vue 在性能.易用性方面是有优势.同时也自己做了和其它框架的性能对比,在这里.今天以版本 0.10.4 为准 入口 Vue 的入口也很直白: ? 1 var demo = new Vue({ el: '#demo', data: { message: 'Hello V

three.js 源码注释(七十四)extras/geometries/ExtrudeGeometry.js

商域无疆 (http://blog.csdn.net/omni360/) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:商域无疆 -  本博客专注于 敏捷开发及移动和物联设备研究:数据可视化.GOLANG.Html5.WEBGL.THREE.JS,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 俺也是刚开始学,好多地儿肯定不对还请见谅. 以下代码是THREE.JS 源码文件中extras/geometries/ExtrudeGeometry.js文件的注释.

three.js 源码注释(十八)Math/Triangle.js

商域无疆 (http://blog.csdn.net/omni360/) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:商域无疆 -  本博客专注于 敏捷开发及移动和物联设备研究:数据可视化.GOLANG.Html5.WEBGL.THREE.JS,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 俺也是刚开始学,好多地儿肯定不对还请见谅. 以下代码是THREE.JS 源码文件中Math/Triangle.js文件的注释. 更多更新在 : https://gith

jqueryui.position.js源码分析

最近要写前端组件了,狂砍各种组件源码,这里分析一款jqueryui中的posistion插件,注意,它不是jqueryui widget,首先看下源码总体结构图 1.看到$.fn.position 是不是很熟悉?嗯,就是将position方法挂载到原型上,然后控件就可以直接调用了, 2.$.ui.position 这个对象是,用来进行冲突判断的,什么冲突?就是元素与父容器所拥有的空间以及当前可用窗口的控件,默认情形下,如果冲突则采用反转方向的方式显示:对这一点不要惊讶,一切都是为了正常显示而用的

html5 Sortable.js 源码分析

最近公司项目经常用到一个拖拽 Sortable.js插件,所以有空的时候看了 Sortable.js 源码,总共1300多行这样,写的挺完美的.拖拽的时候主要由这几个事件完成, ondragstart 事件:当拖拽元素开始被拖拽的时候触发的事件,此事件作用在被拖曳元素上    ondragenter 事件:当拖曳元素进入目标元素的时候触发的事件,此事件作用在目标元素上    ondragover 事件:拖拽元素在目标元素上移动的时候触发的事件,此事件作用在目标元素上    ondrop 事件:被

underscore.js源码解析

一直想针对一个框架的源码好好的学习一下编程思想和技巧,提高一下自己的水平,但是看过一些框架的源码,都感觉看的莫名其妙,看不太懂,最后找到这个underscore.js由于这个比较简短,一千多行,而且读起来容易一些,所以就决定是它了,那废话不多说开始我们的源码学习. underscore.js源码GitHub地址: https://github.com/jashkenas/underscore/blob/master/underscore.js 本文解析的underscore.js版本是1.8.3

从Vue.js源码角度再看数据绑定

## 写在前面 因为对Vue.js很感兴趣,而且平时工作的技术栈也是Vue.js,这几个月花了些时间研究学习了一下Vue.js源码,并做了总结与输出.文章的原地址:[https://github.com/answershuto/learnVue](https://github.com/answershuto/learnVue).在学习过程中,为Vue加上了中文的注释[https://github.com/answershuto/learnVue/tree/master/vue-src](http