亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

jQuery實現的一個自定義Placeholder屬性插件

2019-11-20 14:17:03
字體:
來源:轉載
供稿:網友

HTML5中文本框的新屬性placeholder是個非常好用的屬性,但是IE系列直至IE9都不支持這一屬性,這就讓大家在用這一屬性的時候有些猶豫不決。自己曾經寫過很多類似共的小控件,但是都不是很通用,這里分享一個漸進增強的自定義placeholder的jQuery插件。有點是使用簡單,大家也可以根據自己的需要進行改進。平常寫jQuery插件比較少,考慮到用jQuery的同學比較多,這里就用jQuery插件的形式編寫了。

在這里簡單的介紹一下實現思路。

1.表現與html5原生的placeholder盡量類似
2.漸進增強對于支持placeholder的瀏覽器不做處理

一、首先是幾個工具方法:

1.supportProperty(nodeType, property),獲取瀏覽器是否支持某一控件的某一屬性
2.getPositionInDoc(target, parent),獲取對象在文檔中的位置
3.$c,一個快速創建Dom對象的方法

這幾個工具方法都是一些比較常見通用的方法,如果你有自己的或者更合適的可以自行替換。

二、主體,CustomPlaceholder對象。這個對象主要是維護每一個文本框的信息,包括其位置,應該顯示的提示信息等等,另外它還包含創建提示信息以及定位等方法以及對象的相應事件。

事件主要是在initEvents函數中進行的處理,這里特別要注意的是對提示信息事件的處理,當提示信息被點擊時焦點應該被重新定位到文本框。而文本框要處理的則是focus和blur事件。

復制代碼 代碼如下:

$(self.hint).bind( 'click', function(e){
 self.input.focus();
});

$(self.input).bind( 'focus', function(e){
 self.hint.style.display = 'none';
});

$(self.input).bind( 'blur', function(e){
 if(this.value == ''){
  self.hint.style.display = 'inline';
 }
});

CustomPlacehodler對象的兩個主要方法是createHintLabel(text, position)和position()。createHintLabel是用于創建提示信息的DOM對象并對其進行定位,并返回這個對象。position方法用于強制對提示消息進行重新定位。主要用于頁面大小改變的情況。這兩個方法的功能和實現都比較簡單。

三、插件的功能實現部分。jQuery插件實現方式就不多說了。這里首先進行了能力檢測,如果原生支持placeholder則直接返回。

復制代碼 代碼如下:

if(supportProperty('input', 'placeholder')){
 return;
}

接下來是根據選擇的input對象,生成相應的CustomPlaceholder對象,保存在數組中,并獲取每個對象的提示信息的DOM對象,添加到容器中,最后將容器附加到body對象中。

復制代碼 代碼如下:

var customPlaceholders = [];
if(this.length > 0){
 var box = $c('div', 'dk_placeholderfixed_box');
 for(var i = 0, len = this.length; i < len; i++){
  var input = this[i];
  customPlaceholders.push(new CustomPlaceholder(box, input, option));
 }

 document.body.appendChild(box);
}

最后還有一件比較重要的事情,為window對象綁定resize事件,當window對象觸發resize事件時對所有的customPlacehoder對象進行重新定位。

復制代碼 代碼如下:

$(window).bind( 'resize', function(e){
 for(var i = 0, len = customPlaceholders.length; i < len; i++){
  var customPlaceholder = customPlaceholders[i];
  customPlaceholder.position();
 }

});

這個簡單的小插件到這里就寫完了。

插件源碼:

(function($){var eles = {	div: document.createElement('div'),	ul: document.createElement('ul'),	li: document.createElement('li'),	span: document.createElement('span'),	p: document.createElement('p'),	a: document.createElement('a'),	fragment: document.createDocumentFragment(),	input: document.createElement('input')}	var supportProperty = function(nodeType, property){	switch(arguments.length){		case 0:			return false;		case 1:			var property = nodeType, nodeType = 'div';			property = property.split('.');						if(property.length == 1){				return typeof eles[nodeType][property[0]] !== 'undefined';			}else if(property.length == 2){				return typeof eles[nodeType][property[0]][property[1]] !== 'undefined';			}		case 2:			property = property.split('.');						if(property.length == 1){				return typeof eles[nodeType][property[0]] !== 'undefined';			}else if(property.length == 2){				return typeof eles[nodeType][property[0]][property[1]] !== 'undefined';			}						return false;								default:			return false;	}};var getPositionInDoc = function(target, parent) {	if (!target) {		return null;	}	var left = 0,		top = 0;	do {		left += target.offsetLeft || 0;		top += target.offsetTop || 0;		target = target.offsetParent;		if(parent && target == parent){			break;		}	} while (target);	return {		left: left,		top: top	};}var $c = function(tagName, id, className){	var ele = null;	if(!eles[tagName]){		ele = eles[tagName] = document.createElement(tagName);	}else{		ele = eles[tagName].cloneNode(true);	}	if(id){		ele.id = id;	}	if(className){		ele.className = className;	}	return ele;};	var CustomPlaceholder = function(box, input, option){	var self = this;	var position = getPositionInDoc(input);	self.input = input;		self.option = {xOffset:0, yOffset:0};	for(var item in option){		self.option[item] = option[item];	}	self.hint = self.createHintLabel(input.getAttribute('placeholder'), position);	box.appendChild(self.hint);		self.initEvents = function(){		$(self.hint).bind( 'click', function(e){			self.input.focus();		});				$(self.input).bind( 'focus', function(e){			self.hint.style.display = 'none';		});				$(self.input).bind( 'blur', function(e){			if(this.value == ''){				self.hint.style.display = 'inline';			}		});	};		self.initEvents();};CustomPlaceholder.prototype = {	createHintLabel: function(text, position){		var hint = $c('label');		hint.style.cusor = 'text';		hint.style.position = 'absolute';		hint.style.left = position.left + this.option.xOffset + 'px';		hint.style.top = position.top + this.option.yOffset + 'px';		hint.innerHTML = text;		hint.style.zIndex = '9999';		return hint;	},	position: function(){		var position = getPositionInDoc(this.input);		this.hint.style.left = position.left + this.option.xOffset + 'px';		this.hint.style.top = position.top + this.option.yOffset + 'px';	}};$.fn.placeholder = function(option){	if(supportProperty('input', 'placeholder')){		return;	}	var customPlaceholders = [];	if(this.length > 0){		var box = $c('div', 'dk_placeholderfixed_box');		for(var i = 0, len = this.length; i < len; i++){			var input = this[i];			if($(input).is(':visible')){				customPlaceholders.push(new CustomPlaceholder(box, input, option));			}		}				document.body.appendChild(box);	}		$(window).bind( 'resize', function(e){		for(var i = 0, len = customPlaceholders.length; i < len; i++){			var customPlaceholder = customPlaceholders[i];			customPlaceholder.position();		}			});};})(jQuery);
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
这里只有精品视频在线| 欧美成人精品在线观看| 国内精品久久久久久久| 欧美激情一级二级| 不卡中文字幕av| 国产中文欧美精品| 欧美自拍大量在线观看| 欧美激情一级欧美精品| 亚洲精品国产精品乱码不99按摩| 欧美日韩亚洲系列| 欧美激情久久久久久| 日韩专区在线播放| 久久久av亚洲男天堂| 亚洲欧美在线第一页| 国产美女91呻吟求| 日韩精品电影网| 国产日韩av在线| 九九久久久久99精品| 91在线观看免费高清完整版在线观看| 97香蕉超级碰碰久久免费软件| 日本精品性网站在线观看| 国内外成人免费激情在线视频网站| 亚洲日韩中文字幕在线播放| 91精品国产高清久久久久久久久| 亚洲欧洲在线视频| 欧美性高潮在线| 日韩av中文在线| 国产欧美日韩视频| 国产精品自拍偷拍| 日本国产精品视频| 欧美香蕉大胸在线视频观看| 91久久嫩草影院一区二区| 97久久精品在线| 国产日韩精品在线播放| 久久久999精品| 国产欧美一区二区三区久久人妖| 亚洲人成电影网站| 欧美日韩性视频在线| 午夜精品久久久久久久99热浪潮| 中文一区二区视频| 欧美成人h版在线观看| 久久99久国产精品黄毛片入口| www.久久久久久.com| 国产成人精品一区二区| 久久综合久中文字幕青草| 欧美大尺度激情区在线播放| 日本不卡视频在线播放| 欧美日韩国产999| 精品国产户外野外| 日本精品久久中文字幕佐佐木| 69视频在线免费观看| 国产成人一区二区三区小说| 中文字幕久热精品在线视频| 视频直播国产精品| 91九色国产社区在线观看| 欧美影院成年免费版| 亚洲在线观看视频网站| 日韩va亚洲va欧洲va国产| 精品无码久久久久久国产| 国产成人aa精品一区在线播放| 亚洲成人精品久久久| 欧美日韩国产影院| 国语自产精品视频在线看抢先版图片| 成人两性免费视频| 国产精品久久久久久久久久ktv| 少妇av一区二区三区| 国产欧美韩国高清| 久久久久久国产精品久久| 国产日韩精品入口| 26uuu亚洲国产精品| 成人在线免费观看视视频| 欧美极品美女视频网站在线观看免费| 2019中文字幕全在线观看| 欧美综合在线第二页| 国产精品毛片a∨一区二区三区|国| 亚洲色在线视频| 国产精品久久久久久婷婷天堂| 夜夜狂射影院欧美极品| 日本精品在线视频| www.日韩系列| 欧美福利在线观看| 国产精品福利在线观看| 中文字幕在线看视频国产欧美| 91精品国产高清久久久久久| 韩剧1988在线观看免费完整版| 欧美激情三级免费| 在线观看欧美日韩| 亚洲成成品网站| 日本一区二区在线免费播放| xxav国产精品美女主播| 国产视频在线观看一区二区| 97碰在线观看| 97成人超碰免| 欧美—级a级欧美特级ar全黄| 91精品视频大全| 91精品国产高清久久久久久久久| 一个人看的www久久| 成人福利网站在线观看| 日韩美女免费观看| 欧美性猛交xxxx乱大交3| 97超级碰在线看视频免费在线看| 国产亚洲欧美日韩精品| 在线精品91av| 亚洲欧美日韩成人| 麻豆国产va免费精品高清在线| 亚洲第一精品自拍| 欧美与欧洲交xxxx免费观看| 欧美猛少妇色xxxxx| 国产精品精品视频一区二区三区| 欧美天天综合色影久久精品| 日韩中文字幕视频在线观看| 亚洲日本欧美日韩高观看| 亚洲精品视频二区| 美女久久久久久久| 国产精品aaa| 成人午夜一级二级三级| 欧美性猛交xxxx乱大交极品| 91中文精品字幕在线视频| 国语对白做受69| 26uuu日韩精品一区二区| 国产91精品青草社区| 77777少妇光屁股久久一区| 日韩电影中文字幕在线观看| 亚洲电影天堂av| 欧美日韩国产页| 日本国产欧美一区二区三区| 欧美性猛交xxxx免费看漫画| 久久综合久久美利坚合众国| 91九色精品视频| www.欧美视频| 亚洲xxxx妇黄裸体| 精品香蕉在线观看视频一| 国产精品18久久久久久麻辣| 中文字幕亚洲激情| 久久色在线播放| 国外成人在线直播| 91成人免费观看网站| 日韩av一区二区在线| 日韩美女写真福利在线观看| 国产精品999| 久久九九国产精品怡红院| 亚洲www在线观看| 日韩一区二区三区国产| 亚洲人成网站999久久久综合| 成人黄色片在线| 亚洲一区二区久久久久久| 日韩av有码在线| 欧美理论电影在线观看| 久久免费高清视频| 在线激情影院一区| 97国产精品人人爽人人做| 亚洲一区中文字幕在线观看| 国产精品扒开腿做爽爽爽的视频| 精品久久久久久久久国产字幕| 亚洲欧洲在线播放| 成人国产亚洲精品a区天堂华泰| 欧美亚洲成人网| 亚洲色图17p| 国产亚洲精品久久| 欧美与黑人午夜性猛交久久久| 97色在线观看| 中文字幕自拍vr一区二区三区| 97在线视频免费观看| 在线日韩日本国产亚洲|