-
Notifications
You must be signed in to change notification settings - Fork 0
/
jquery.capsChecker.js
65 lines (55 loc) · 1.93 KB
/
jquery.capsChecker.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
; (function ($, undefined) {
var pluginName = 'capsChecker',
defaults = {
capson: false, capsoff: false
};
function CapsChecker( element, options ) {
this.element = element;
this.options = $.extend({}, defaults, options);
this.init();
}
CapsChecker.prototype = {
_keyDown : function(e) {
$(this).data('_lastKey', e.which);
},
_keyPress : function(e) {
var lastKey = +$(this).data('_lastKey');
if(lastKey < 47 || lastKey > 90) return true;
var letter = String.fromCharCode(e.which);
var upper = letter.toUpperCase();
var isNumeric = lastKey < 58;
var shift = e.shiftKey;
var caps = false;
if(isNumeric)
caps = (lastKey == e.which && shift) || (lastKey != e.which && !shift);
else if( (letter === upper && !shift) || (letter !== upper && shift) )
caps = !isNumeric;
$(this).trigger('caps' + (caps ? 'on' : 'off'), caps);
},
init : function () {
this.element.on('keydown', this._keyDown)
.on('keypress', this._keyPress);
this.options.capson && this.element.on('capson', this.options.capson);
this.options.capsoff && this.element.on('capsoff', this.options.capsoff);
},
destroy : function () {
this.element.off('keydown', this._keyDown)
.off('keypress', this._keyPress)
.removeData(['_lastKey', pluginName]);
this.element.off('capson');
this.element.off('capsoff');
}
};
$.fn[pluginName] = function ( options, args ) {
return this.each(function () {
var cached = $.data( this, pluginName );
if( cached )
{
options.substring && cached[options]( args );
return 1;
}
cached = $(this);
cached.data(pluginName, new CapsChecker( cached, options ));
});
};
})(jQuery);