--- /dev/null
+/**
+ * jQuery.labelify - Display in-textbox hints
+ * Stuart Langridge, http://www.kryogenix.org/
+ * Released into the public domain
+ * Date: 25th June 2008
+ * @author Stuart Langridge
+ * @version 1.3
+ *
+ *
+ * Basic calling syntax: $("input").labelify();
+ * Defaults to taking the in-field label from the field's title attribute
+ *
+ * You can also pass an options object with the following keys:
+ * text
+ * "title" to get the in-field label from the field's title attribute
+ * (this is the default)
+ * "label" to get the in-field label from the inner text of the field's label
+ * (note that the label must be attached to the field with for="fieldid")
+ * a function which takes one parameter, the input field, and returns
+ * whatever text it likes
+ *
+ * labelledClass
+ * a class that will be applied to the input field when it contains the
+ * label and removed when it contains user input. Defaults to blank.
+ *
+ */
+jQuery.fn.labelify = function(settings) {
+ settings = jQuery.extend({
+ text: "title",
+ labelledClass: ""
+ }, settings);
+ var lookups = {
+ title: function(input) {
+ return $(input).attr("title");
+ },
+ label: function(input) {
+ return $("label[for=" + input.id +"]").text();
+ }
+ };
+ var lookup;
+ var jQuery_labellified_elements = $(this);
+ return $(this).each(function() {
+ if (typeof settings.text === "string") {
+ lookup = lookups[settings.text]; // what if not there?
+ } else {
+ lookup = settings.text; // what if not a fn?
+ };
+ // bail if lookup isn't a function or if it returns undefined
+ if (typeof lookup !== "function") { return; }
+ var lookupval = lookup(this);
+ if (!lookupval) { return; }
+
+ // need to strip newlines because the browser strips them
+ // if you set textbox.value to a string containing them
+ $(this).data("label",lookup(this).replace(/\n/g,''));
+ $(this).focus(function() {
+ if (this.value === $(this).data("label")) {
+ this.value = this.defaultValue;
+ $(this).removeClass(settings.labelledClass);
+ }
+ }).blur(function(){
+ if (this.value === this.defaultValue) {
+ this.value = $(this).data("label");
+ $(this).addClass(settings.labelledClass);
+ }
+ });
+
+ var removeValuesOnExit = function() {
+ jQuery_labellified_elements.each(function(){
+ if (this.value === $(this).data("label")) {
+ this.value = this.defaultValue;
+ $(this).removeClass(settings.labelledClass);
+ }
+ })
+ };
+
+ $(this).parents("form").submit(removeValuesOnExit);
+ $(window).unload(removeValuesOnExit);
+
+ if (this.value !== this.defaultValue) {
+ // user already started typing; don't overwrite their work!
+ return;
+ }
+ // actually set the value
+ this.value = $(this).data("label");
+ $(this).addClass(settings.labelledClass);
+
+ });
+};
\ No newline at end of file