/** * jQuery Maxlength plugin * @version $Id: jquery.maxlength.js 18 2009-05-16 15:37:08Z emil@anon-design.se $ * @package jQuery maxlength 1.0.5 * @copyright Copyright (C) 2009 Emil Stjerneman / http://www.anon-design.se * @license GNU/GPL, see LICENSE.txt */ (function($) { $.fn.maxlength = function(options) { var settings = jQuery.extend( { events: [], // Array of events to be triggerd maxCharacters: 101, // Characters limit status: true, // True to show status indicator bewlow the element statusClass: "status", // The class on the status div statusText: "words left", // The status text notificationClass: "notification", // Will be added to the emement when maxlength is reached showAlert: false, // True to show a regular alert message alertText: "You have typed too many words.", // Text in the alert message slider: false // Use counter slider }, options ); // Add the default event $.merge(settings.events, ['keyup']); return this.each(function() { var item = $(this); var charactersLength = $(this).val().split(' ').length; // Update the status text function updateStatus() { var charactersLeft = settings.maxCharacters - charactersLength; if(charactersLeft < 0) { charactersLeft = 0; } item.next("div").html(charactersLeft + " " + settings.statusText); } function checkChars() { var valid = true; // Too many chars? if(charactersLength >= settings.maxCharacters) { // Too may chars, set the valid boolean to false valid = false; // Add the notifycation class when we have too many chars item.addClass(settings.notificationClass); // Cut down the string var str_arr = jQuery.trim(item.val()).split(' '); var cut_string = ''; for (i=0;i<=99;i++) { cut_string += str_arr[i] + ' '; } item.val(cut_string); // Show the alert dialog box, if its set to true showAlert(); } else { // Remove the notification class if(item.hasClass(settings.notificationClass)) { item.removeClass(settings.notificationClass); } } if(settings.status) { updateStatus(); } } // Shows an alert msg function showAlert() { if(settings.showAlert) { alert(settings.alertText); } } // Check if the element is valid. function validateElement() { var ret = false; if(item.is('textarea')) { ret = true; } else if(item.filter("input[type=text]")) { ret = true; } else if(item.filter("input[type=password]")) { ret = true; } return ret; } // Validate if(!validateElement()) { return false; } // Loop through the events and bind them to the element $.each(settings.events, function (i, n) { item.bind(n, function(e) { charactersLength = item.val().split(' ').length; checkChars(); }); }); // Insert the status div if(settings.status) { item.after($("
").addClass(settings.statusClass).html('-')); updateStatus(); } // Remove the status div if(!settings.status) { var removeThisDiv = item.next("div."+settings.statusClass); if(removeThisDiv) { removeThisDiv.remove(); } } // Slide counter if(settings.slider) { item.next().hide(); item.focus(function(){ item.next().slideDown('fast'); }); item.blur(function(){ item.next().slideUp('fast'); }); } }); }; })(jQuery);