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

首頁 > 網站 > 建站經驗 > 正文

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

2024-04-25 20:31:32
字體:
來源:轉載
供稿:網友

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
欧美成人性色生活仑片| 精品激情国产视频| 国产免费观看久久黄| 欧美理论电影在线观看| 亚洲精品资源美女情侣酒店| 亚洲一区二区中文字幕| 久久精品色欧美aⅴ一区二区| 国产精品私拍pans大尺度在线| 综合国产在线视频| 亚洲一区亚洲二区亚洲三区| 国产精品v片在线观看不卡| 国产欧美一区二区三区四区| 欧美大片在线看免费观看| 欧美精品成人91久久久久久久| 亚洲跨种族黑人xxx| 亚洲人在线视频| 精品久久久久久久大神国产| 成人福利网站在线观看11| 中文字幕一区日韩电影| 亚洲欧美日韩精品久久奇米色影视| 久久免费视频网站| 国产成人精品免高潮费视频| 国产日本欧美视频| 亚洲自拍另类欧美丝袜| 欧美成人亚洲成人日韩成人| 久久久国产一区二区| 欧美xxxwww| 亚洲天堂av高清| 欧美激情乱人伦一区| 国产精品女人网站| 国产视频丨精品|在线观看| 欧美一级片在线播放| 国产日韩欧美中文| 国产精品亚洲аv天堂网| 亚洲午夜未满十八勿入免费观看全集| 国产精品第10页| 国产成人av在线| 第一福利永久视频精品| 精品国产福利在线| 91wwwcom在线观看| 亚洲天堂网站在线观看视频| 欧美在线视频a| 欧美性xxxx极品hd满灌| 91免费高清视频| 国外成人在线直播| 精品久久久久久中文字幕一区奶水| 国产精品日日做人人爱| 欧美寡妇偷汉性猛交| 日韩精品久久久久| 2019中文字幕在线免费观看| 午夜免费久久久久| 欧美激情综合色综合啪啪五月| 亚洲国产日韩欧美在线图片| 欧美一区在线直播| 亚洲国产精品va在线看黑人| 美女啪啪无遮挡免费久久网站| 26uuu亚洲国产精品| 97碰碰碰免费色视频| 福利精品视频在线| 国产一区二区三区视频免费| 91精品久久久久久久久久久久久久| 亚洲人午夜精品免费| 91日韩在线播放| 国产91在线高潮白浆在线观看| 国产精品久久久久久久久影视| 91精品国产成人| 欧美国产亚洲精品久久久8v| 精品亚洲一区二区| 国产网站欧美日韩免费精品在线观看| 亚洲第一免费网站| 成人国产精品色哟哟| 日韩精品欧美国产精品忘忧草| 成人黄色免费在线观看| 国产精品自产拍高潮在线观看| 久久视频在线播放| 欧美黄色片视频| 爽爽爽爽爽爽爽成人免费观看| 国产精品嫩草影院久久久| 日韩电影中文字幕av| 成人黄色短视频在线观看| 午夜精品在线视频| 久久中文字幕在线| www.99久久热国产日韩欧美.com| 精品国产鲁一鲁一区二区张丽| 亚洲色图校园春色| 91久久精品一区| 午夜精品久久久久久久久久久久| 精品中文字幕乱| 九九精品在线视频| 97在线视频免费看| 亚洲最新av在线| 亚洲国产一区自拍| 国产精品久久久久久av福利| 亚洲欧美日韩精品久久奇米色影视| 欧美中文在线免费| 国产精品一区久久久| 国产精品久久久久久久天堂| www.国产精品一二区| 亚洲人成电影网| 日韩综合中文字幕| 亚洲电影中文字幕| 日韩免费观看av| 成人性教育视频在线观看| 欧美久久精品一级黑人c片| 91在线国产电影| 国产精品久久久久久婷婷天堂| 日韩av资源在线播放| 韩国精品久久久999| 欧洲美女7788成人免费视频| 岛国av一区二区在线在线观看| 浅井舞香一区二区| 国产欧美精品日韩精品| 国产男人精品视频| 青青草原一区二区| 欧美怡红院视频一区二区三区| 国产69久久精品成人看| 国产成人在线一区| 在线免费看av不卡| 91精品国产自产在线老师啪| 精品久久香蕉国产线看观看亚洲| 亚洲精品久久久久中文字幕欢迎你| 日韩精品亚洲元码| 欧美国产精品人人做人人爱| 国产精品久久久久久久久久新婚| 亚洲免费一在线| 国产精品久久久999| 欧美日韩视频免费播放| xx视频.9999.com| 久久久97精品| 国产精品一区二区久久久久| 国内精品视频久久| 久久久在线视频| 国产精品久久久久久久久久99| 国产经典一区二区| 亚洲成人在线视频播放| 欧美丰满老妇厨房牲生活| 日韩av一区在线| 欧美xxxx综合视频| 中文字幕精品久久| 亚洲精品日韩在线| 超薄丝袜一区二区| 日韩黄色av网站| 欧美在线视频一区| 久久精品一偷一偷国产| 欧美在线视频在线播放完整版免费观看| 国产亚洲精品综合一区91| 福利一区视频在线观看| 久久影视电视剧免费网站清宫辞电视| 亚洲国产91色在线| 日韩欧美亚洲一二三区| 亚洲影影院av| 一本色道久久综合狠狠躁篇怎么玩| 国内偷自视频区视频综合| 在线国产精品播放| 国产精品露脸自拍| 懂色av中文一区二区三区天美| 久久久久九九九九| 日韩精品在线观看一区二区| 亚洲激情视频在线观看| 亚洲欧洲一区二区三区久久| 中文国产成人精品久久一| 精品久久中文字幕久久av| 国产精品精品国产| 国产成人在线一区|