(function($) { $.fn.prepopulate = function(dependencies, maxLength) { /* Depends on urlify.js Populates a selected field with the values of the dependent fields, URLifies and shortens the string. dependencies - array of dependent fields id's maxLength - maximum length of the URLify'd string */ return this.each(function() { var field = $(this); field.data('_changed', false); field.change(function() { field.data('_changed', true); }); var populate = function () { // Bail if the fields value has changed if (field.data('_changed') == true) return; var values = []; $.each(dependencies, function(i, field) { if ($(field).val().length > 0) { values.push($(field).val()); } }) field.val(URLify(values.join(' '), maxLength)); }; $(dependencies.join(',')).keyup(populate).change(populate).focus(populate); }); }; })(grp.jQuery);