模拟和HTML5的ploceholder的效果

本文介绍了一个自定义占位符插件的实现方式,该插件提供了两种模拟方式:value模拟和label模拟,并允许取消支持HTML5浏览器的默认placeholder属性。通过绑定事件监听器,插件能够根据不同状态显示或隐藏占位符文本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.采用value模拟

2.利用label模拟,让label的for绑定input元素。label覆盖在input元素上。使用label模式模拟占位符的时候,如果文本控件没有id,则插件会自动创建一个随机id.

<script type="text/javascript">
	(function($,undefined){
		$.fn.placeholder=function(options){
			var defaults = {
				labelMode : false,  //默认false采用value模拟,true采用label模拟
				labelStyle:{},       //设置label的样式
				labelAcross : false  //默认false,true让支持HTML5的浏览器取消默认的placeholder属性,统一使用自定义的placeholder属性
			};
			var params = $.extend({},defaults,options);
			$(this).each(function(){
				var element=$(this);
				var isPlaceholder = 'placeholder' in document.createElement('input');
				var placeholder = $(this).attr('placeholder');
				//element.data("placeholder",placeholder);
				//让支持HTML5的浏览器取消默认的placeholder属性,统一使用自定义的placeholder属性
				if(params.labelAcross && isPlaceholder){
					element.removeAttr("placeholder");
					isPlaceholder = false;
				}
				if(element && (!isPlaceholder) && placeholder){					
					//label模拟
					if(params.labelMode){
						
						var elementId = element.attr('id');
						var label=null;
						if(!elementId){
							elementId = "placeholder"+Math.random();
							element.attr("id",elementId);
						}
						//创建label
						label = $('<label for="'+elementId+'"></label>').css($.extend({
							position : "absolute",
							margin : '2px 0 0 3px',
							color : "grayText",
							cursor :"text"
						},params.labelStyle)).insertBefore(element);
						element.bind({
							"keyup" : function(){
								if($(this).val()===''){
									label.html(placeholder);
								}else{
									label.html("")
								}
							},
							"focus" : function(){
								if($(this).val()===''){
									label.html(placeholder);
								}else{
									label.html("")
								}
							},
							"blur" : function(){
								if($(this).val()==''){
									label.html(placeholder).css('color','graytext');
								}
							}
							
						});
						
						//初始化
						if(element.val()===''){
							label.html(placeholder).css('color','graytext');
						}
					}else{
						//value模拟
						element.bind({
							"focus" : function(){
								if(element.val()===placeholder){
									element.css("color", "");
								}
							},
							"blur" : function(){
								if(element.val()==''){
									element.val(placeholder).css('color','graytext');
								}
							}
							
						});
						//初始化
						if(element.val()==''){
							element.val(placeholder).css('color','graytext');
						}
					}
				}
			});
		return $(this);
		};
	})(jQuery);    
</script>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值