ie_placeholder最佳兼容方案
https://gitee.com/hustcc/placeholder.js
巧妙的使用了canvas.toDataURL(),动态生成了一个背景图,可以作为兼容IE9-的placeholder方案。perfect!!!!! 基于这个可以对placeholder进行兼容,以下是扩展代码:
/**
* Created by Administrator on 2017/7/18 0018.
* Time: 16:11
* https://gitee.com/hustcc/placeholder.js
* version: 2018-1-11 16:14:47
*/
import placeholder from "placeHolder.js"
/**
* 判断是否支持placeholder
* @returns {boolean}
*/
var supportPlaceHoder = () => {
return "placeholder" in document.createElement("input");
}
//placehoder默认配置
var defaultOption = {
//我用的input是高度38的
size: '200x38',
bgcolor: 'rgba(0,0,0,0)',
color: '#777777',
fsize: '14',
fweight: "normal",
ffamily: "微软雅黑"
}
function cssValue2Num(cssValue) {
return cssValue.replace("px", "") * 1;
}
/**
* 根据placeholder长度计算宽度,生成背景图片
* @param text
* @param 扩展:textAlign placeholder文字是否input居中,默认靠右
* @returns {*}
*/
var createPlaceHolderImg = function (textAlign) {
var $self = $(this), text = $.trim($self.attr("placeholder")),
imgWidth = (textAlign && textAlign === "center") ? $self.width() : (function () {
//创建一个元素隐藏于页面,用来计算图片宽度
var $span = $("<span>").addClass("placeholder-temp")
.css("font-size", $self.css("font-size")).text(text);
$("body").append($span);
var width = $span.width();
//获取padding和text-indent实现背景中文字的text-indent效果
return $span.remove(), $span == null, width + cssValue2Num($self.css("text-indent")) * 2 + cssValue2Num($self.css("padding-left")) * 2;
}());
//创建节点,计算placeholder宽度
return placeholder.getData($.extend(true, {}, defaultOption, {
text: text,
size: imgWidth + "x38",
fsize: cssValue2Num($self.css("font-size"))
}));
}
/**
* 初始化placeholder
*/
var initPlaceHolder = () => {
$(":text,textarea,:password").each(function (index, item) {
var $item = $(item), val = $.trim($item.val()), placeholderText = $item.attr("placeholder");
(!!placeholderText && (val === "" || val.length === 0)) && $item.attr("style", "background:url('" + createPlaceHolderImg.apply(item) + "') no-repeat left center;");
})
//keyup用来兼容IE9粘贴和backspace不触发change事件
.on("input propertychange keyup blur", function (e) {
var $this = $(this), val = $.trim($this.val());
(val === "" || val.length === 0) ? $this.removeClass("no-placeholder") : $this.addClass("no-placeholder");
});
}
$(function () {
!supportPlaceHoder() && initPlaceHolder();
});
如果你的网站还在兼容IE9-,那么千万不要用value的方式进行兼容placeholder,一个简单的表单验证,一个简单的数据加密功能,都会让你死无葬身之地!!
如果你的网站还在兼容IE9-,那么千万不要用value的方式进行兼容placeholder,一个简单的表单验证,一个简单的数据加密功能,都会让你死无葬身之地!!
如果你的网站还在兼容IE9-,那么千万不要用value的方式进行兼容placeholder,一个简单的表单验证,一个简单的数据加密功能,都会让你死无葬身之地!!
ie_placeholder最佳兼容方案的更多相关文章
- js中getBoundingClientRect的作用及兼容方案
js中getBoundingClientRect的作用及兼容方案 1.getBoundingClientRect的作用 getBoundingClientRect用于获取某个html元素相对于视窗的位 ...
- 让IE8支持HTML5及canvas功能!chart.js图表绘制工具库IE8上兼容方案
第一步,我们加上对html5的支持. <!--[if IE]> <script src="/public/html5.js" type="text/ja ...
- Emoji表情符号兼容方案(适用ios,android,wp等平台)
http://blog.csdn.net/qdkfriend/article/details/7576524 Emoji表情符号兼容方案 一 什么是Emoji emoji就是表情符号:词义来自日语(え ...
- Drawable 着色的后向兼容方案
看到 Android Weekly 最新一期有一篇文章:Tinting drawables,使用 ColorFilter 手动打造了一个TintBitmapDrawable,之前也看到有些文章使用这种 ...
- [ios2]Emoji表情符号兼容方案 【转】
Emoji表情符号兼容方案 一 什么是Emoji emoji就是表情符号:词义来自日语(えもじ,e-moji,moji在日语中的含义是字符) 表情符号现已普遍应用于手机短信和网络聊天软件. emoji ...
- Editplus下载、安装并最佳配色方案(强烈推荐)
不多说,直接上干货! Editplus下载 第一步:进入官网 https://www.editplus.com/ 第二步:下载 https://www.editplus.com/download.ht ...
- localStorage兼容方案
localStorage是H5的存储方案,各大浏览器支持都相当不错,唯一悲催的就是IE,这个浏览器界的另类总是显得格格不入. IE “Internet选项”->“安全”中有一个“启动保护模式”的 ...
- 最新CSS兼容方案
CSS兼容方案,让你的样式完美兼容各大浏览器,这个方案主要是用来解决Safari的,Opear是在测试的时候顺带试了一下,结果发现竟然也行,所以顺便也解决了. .e {/*FF OP*/ color: ...
- 洛谷 P2756 飞行员配对方案问题 (二分图/网络流,最佳匹配方案)
P2756 飞行员配对方案问题 题目背景 第二次世界大战时期.. 题目描述 英国皇家空军从沦陷国征募了大量外籍飞行员.由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的2 名飞行员,其 ...
随机推荐
- ubuntu 和 centOS 的apache设置
更改ubuntu的网站访问根目录: 在sudo gedit /etc/apache2/sites-enabled/000-default,把 DocumentRoot /var/www #这 ...
- chromium源码阅读--V8 Embbeding
V8是google提供高性能JavaScript解释器,嵌入在chromium里执行JavaScript代码. V8本身是C++实现的,所有嵌入本身毫无压力,一起编译即可,不过作为一个动态语言解释器, ...
- lintcode-103-带环链表 II
带环链表 II 给定一个链表,如果链表中存在环,则返回到链表中环的起始节点的值,如果没有环,返回null. 样例 给出 -21->10->4->5, tail connects to ...
- (转)Nginx配置和内核优化 实现突破十万并发
nginx指令中的优化(配置文件) worker_processes 8; nginx进程数,建议按照cpu数目来指定,一般为它的倍数. worker_cpu_affinity 00000001 00 ...
- Java基础知识-去重
java基础知识-去掉list集合中的重复元素: 思路: 首先新建一个容器resultList用来存放去重之后的元素 然后遍历sourceList集合中的元素 判断所遍历的元素是否已经存在于resul ...
- 【bzoj4627】[BeiJing2016]回转寿司 离散化+树状数组
题目描述 给出一个长度为n的序列,求所有元素的和在[L,R]范围内的连续子序列的个数. 输入 第一行包含三个整数N,L和R,分别表示寿司盘数,满意度的下限和上限. 第二行包含N个整数Ai,表示小Z对寿 ...
- Python数据分析(一)pandas数据切片
1.获取行或列数据 loc——通过行标签索引行数据 iloc——通过行号索引行数据 ix——通过行标签或者行号索引行数据(基于loc和iloc 的混合) 同理,索引列数据也是如此! import pa ...
- Python 类和对象-上
#类和对象 class Human: #属性 -> 成员属性(变量) ear = 2 mouth = 1 sex = 'man' age = 28 name = 'zhangwang' marr ...
- CTSC2018 & APIO2018 颓废 + 打铁记
CTSC2018 & APIO2018 颓废 + 打铁记 CTSC 5 月 6 日 完美错过报道,到酒店领了房卡放完行李后直接奔向八十中拿胸牌.饭票和资料.试机时是九省联考的题,从来没做过,我 ...
- error C3872: '0x3000': this character is not allowed in an identifier 解决方法
文章参考地址:http://blog.csdn.net/danxuezx/article/details/5096497 编译时遇到这个错误多半是从网上拷贝一段代码到VS里然后编译时产生的,这是因为拷 ...