Internet Explorer 8 doesn't support the HTML5 placeholder
attribute that we can use to label our text fields. Fortunately, we can emulate this attribute with jQuery. Let's see how.
We have to create a plugin to exactly position an element with its text label just over a text field:
(function($) { $.fn.placeholder = function(options) { var that = this; if(!that.is('input[type=text]')) { return; } var defaults = { text: 'Placeholder' }; options = $.extend(defaults, options); var top = that.offset().top; var left = that.offset().left; return that.each(function() { $('<span class="placeholder"/>').text(options.text). css({ position: 'absolute', top: top, left: left }).insertAfter(that); that.focus(function() { that.next('span.placeholder').hide(); }); that.blur(function() { if(that.val() == '') { that.next('span.placeholder').show(); } }); }); }; })(jQuery);
We use the top and left offsets of the text field to position our element. We use then focus
and blur
to hide the placeholder while a user is typing and to show it again if the field's value is empty, respectively.
An example:
$(function() { $('#text', '#form').placeholder({text: 'Lorem'}); $('#text2', '#form').placeholder({text: 'Lorem ipsum'}); });
You can see the demo below.