- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章jQuery实现的一个自定义Placeholder属性插件由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
HTML5中文本框的新属性placeholder是个非常好用的属性,但是IE系列直至IE9都不支持这一属性,这就让大家在用这一属性的时候有些犹豫不决。自己曾经写过很多类似共的小控件,但是都不是很通用,这里分享一个渐进增强的自定义placeholder的jQuery插件。有点是使用简单,大家也可以根据自己的需要进行改进。平常写jQuery插件比较少,考虑到用jQuery的同学比较多,这里就用jQuery插件的形式编写了.
在这里简单的介绍一下实现思路.
1.表现与html5原生的placeholder尽量类似 2.渐进增强对于支持placeholder的浏览器不做处理 。
1、首先是几个工具方法:
1.supportProperty(nodeType, property),获取浏览器是否支持某一控件的某一属性 2.getPositionInDoc(target, parent),获取对象在文档中的位置 3.$c,一个快速创建Dom对象的方法 。
这几个工具方法都是一些比较常见通用的方法,如果你有自己的或者更合适的可以自行替换.
2、主体,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方法用于强制对提示消息进行重新定位。主要用于页面大小改变的情况。这两个方法的功能和实现都比较简单.
3、插件的功能实现部分。jQuery插件实现方式就不多说了。这里首先进行了能力检测,如果原生支持placeholder则直接返回.
。
接下来是根据选择的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(); } 。
。
}),
。
这个简单的小插件到这里就写完了.
插件源码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
(
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);
|
。
最后此篇关于jQuery实现的一个自定义Placeholder属性插件的文章就讲到这里了,如果你想了解更多关于jQuery实现的一个自定义Placeholder属性插件的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我已经开始学习 tensorflow,但很难理解占位符/变量问题。 我正在尝试编写一个矩阵乘法函数。它在使用 tf.constant 时有效,但我很难理解如何使用变量 这是我的代码 import te
我正在尝试匹配两个 URL,一个带有占位符,一个带有 Angular 中的填充占位符和 TypeScript。 例如 URL 在占位符被填充之前: http://this/is/{placeholde
我正在尝试理解 std::bind。我编写了以下程序。 #include
结果:两个属性文件均已加载 其中properties_location是“a.properties,b.properties” result: Exception in thread "main"
根据this推荐的解决方案是让 Placeholder 实现 Parcelable 接口(interface)。但在我的例子中,Placeholder 已经是一个接口(interface),因此无法实
当我尝试更改 input 元素的 placeholder 属性时,它已成功完成。如果我将其更改为 MVC 中的 textboxfor 或 textareafor 元素,即使我使用 @placehold
我在我的 Pycharm 中编写了以下代码,它在 Tensorflow 中执行完全连接层 (FCL)。占位符发生无效参数错误。所以我在占位符中输入了所有的dtype、shape和name,但我仍然得到
当我尝试使用 removeAttr('placeholder') 从输入元素中删除占位符属性时:placeholder-shown 伪类不会从元素中删除,而是会更改输入值的颜色。 $(document
这很可能是一个错误,但我在这里报告它以供引用,并希望有人能够提出解决方法。 IE 11 在 textarea 元素上原生支持 placeholder 属性。那太棒了。但是,向 DOM 添加一个带有占位
尝试运行此代码时出现上述意外错误: # -*- coding: utf-8 -*- """ Created on Fri Jun 24 10:38:04 2016 @author: andrea ""
MVC 5.2.2 Razor 3.2.2 剑道 MVC UI v2014.2.903 在 Javascript 中,当我想更改 ComboBoxFor 的占位符文本时,我想我可以这样做: @mode
我想像这样向占位符添加一个图标 $("#tag_list").select2({ allowClear: true, placeholder: " inout
我们可以在play2的anorm中编写如下的sqls: def findById(id: String): Option[Link] = DB.withConnection {implicit con
在我的 iOS 应用程序中,我有一个简单的 View ,我以编程方式向其中添加了 TabBar 和 Navigation Bar。我使用 Interface Builder 添加了几个 GUI 元素。
我有这个代码 var i = 1 println(i) //result is 1 println(%02i) //is wrong 我希望它输出 01 而不是 1 最佳答案 不幸的是,你不能像这
我有一个简单的 HTML 表单,其中包含输入: 我有一个 JS 函数来检查输入的值是否为空,如果是,则用占位符的值填充它(对于非 Webkit 浏览器)。现在我想阻止保存占位符的值,所以我编写了一个
我正在使用 mathiasbynens / jquery-placeholder在 IE9 中启用占位符。我遵循了自述文件中提到的简单步骤。 但我在 $('input, textarea').plac
由于并非所有用户都保证支持 HTML 5 占位符属性,因此我尝试在 JavaScript 中为其构建解决方法: $(document).ready(function() { var searc
下面的链接将在 http://placehold.it 提供的占位符图像上打印“hello world” http://placehold.it/200&text=hello+world 是否可以在上
有没有办法设置“占位符”并稍后在逐行创建文本文件时编辑此部分,或者我是否必须最后进行行搜索并编辑此部分? 我想用常量对选定的行进行计数,如果到达文件末尾,我想将列表常量的总和写入文件头。 CONSTA
我是一名优秀的程序员,十分优秀!