Another one, with, despite its name, support for password fields (by
cloning the field and displaying a normal input while not focused):

Demo: http://dev.jquery.com/view/trunk/plugins/searchField/
Source: 
http://dev.jquery.com/view/trunk/plugins/searchField/jquery.searchField.js
Usage:
$("input").searchField(); //uses the title attribute
$("input").searchField("Label"); // uses the given label

I'd like to gather all these various implementations under the
umbrella of jQuery UI forms, into one watermark/whatever plugin,
together with at least the form and validation plugins...

Jörn

On Fri, Jul 18, 2008 at 3:10 PM, Karl Swedberg <[EMAIL PROTECTED]> wrote:
> I really like this approach, Scott!
> The advantage it has is that it plays nicely with form validation. Not an
> issue with a simple search field, but for larger forms in which the fields
> need to be empty unless user enters text, the other approach could foil
> validating on required fields because those fields would have the
> placeholder text.
> I wrote a similar plugin for a project at work. With mine, you select the
> input rather than the label. It uses the label text by default, but it can
> also use the input's title attribute or a custom string. The disadvantage of
> mine is that it might require some additional CSS to get the label to line
> up properly.
> Anyway, here it is, in case anyone is interested.
> (function($) {
> $.fn.defaulttext = function(options) {
>   var elText = {
>     title: function(input) {
>       return $(input).attr('title');
>     },
>     label: function(input) {
>       return $('label[for=' + input.id +']').text();
>     }
>   };
>   var defText;
>   return this.each(function() {
>     var $input = $(this);
>     if (this.type === 'text' || this.nodeName.toLowerCase() === 'textarea')
> {
>       var opts = $.extend({}, $.fn.defaulttext.defaults, options || {},
> $.metadata ? $input.metadata() : $.meta ? $input.data() : {});
>       if (opts.dtText.constructor === Function) {
>         defText = opts.dtText(this);
>       } else if (opts.dtText && opts.dtText.constructor === String){
>         defText = (/(title|label)/).test(opts.dtText) ?
> elText[opts.dtText](this) : opts.dtText;
>       }
>       if (!defText) {return;}
>       if ($input.parent().css('position') == 'static') {
>         $input.parent().css({position: 'relative'});
>       }
>       $(opts.dtTag).html(defText)
>         .addClass(opts.dtClass)
>         .css({
>           position: 'absolute',
>           top: $input.position().top,
>           left: $input.position().left,
>           display: 'none'
>         })
>         .insertBefore($input);
>       // hide default text on focus
>       $input.focus(function() {
>         dtHide($input);
>       });
>       $input.prev('.' + opts.dtClass).click(function() {
>         dtHide($input);
>         $input.focus();
>       });
>       // conditionally show default text on ready and input blur
>       dtShow($input);
>       $input.blur(function() {
>         dtShow($input);
>       });
>     }
>   });
>
>   function dtHide(el) {
>     el.prev().hide();
>   }
>   function dtShow(el) {
>     if ($.trim(el.val()) == '') {
>       el.prev().show();
>     }
>   }
> };
> $.fn.defaulttext.defaults = {
>   dtTag: '<span></span>', // this is the element used for the default text
>   dtClass: 'default-text', // class applied to the default text
>   dtText: 'label'            // 'label' uses text of input's label; 'title'
> uses input's title attribute.
>                               //  otherwise, use some other string or
> function
> };
> })(jQuery);
>
>
> --Karl
> ____________
> Karl Swedberg
> www.englishrules.com
> www.learningjquery.com
>
>
>
> On Jul 17, 2008, at 9:24 PM, Scott Sauyet wrote:
>
> Andy Matthews wrote:
>
> Is there a plugin for this by chance? I know it's pretty quick to write, but
> wanted to find out if someone's already done it better than I could.
>
> Also, would toggle() work for this sort of thing? Is there a focus/blur
> toggle in the jQuery core?
>
> Something similar I did some time ago:
>
> http://scott.sauyet.com/thoughts/archives/2007/03/31/overlabel-with-jquery/
>
> (scroll to the bottom for the final version.)  This places the label for a
> text field on top of that box but hides it on focus or when there is actual
> content in the field.  It's mainly a real-estate saving feature.
>
>  -- Scott
>
>

Reply via email to