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最佳兼容方案的更多相关文章

  1. js中getBoundingClientRect的作用及兼容方案

    js中getBoundingClientRect的作用及兼容方案 1.getBoundingClientRect的作用 getBoundingClientRect用于获取某个html元素相对于视窗的位 ...

  2. 让IE8支持HTML5及canvas功能!chart.js图表绘制工具库IE8上兼容方案

    第一步,我们加上对html5的支持. <!--[if IE]> <script src="/public/html5.js" type="text/ja ...

  3. Emoji表情符号兼容方案(适用ios,android,wp等平台)

    http://blog.csdn.net/qdkfriend/article/details/7576524 Emoji表情符号兼容方案 一 什么是Emoji emoji就是表情符号:词义来自日语(え ...

  4. Drawable 着色的后向兼容方案

    看到 Android Weekly 最新一期有一篇文章:Tinting drawables,使用 ColorFilter 手动打造了一个TintBitmapDrawable,之前也看到有些文章使用这种 ...

  5. [ios2]Emoji表情符号兼容方案 【转】

    Emoji表情符号兼容方案 一 什么是Emoji emoji就是表情符号:词义来自日语(えもじ,e-moji,moji在日语中的含义是字符) 表情符号现已普遍应用于手机短信和网络聊天软件. emoji ...

  6. Editplus下载、安装并最佳配色方案(强烈推荐)

    不多说,直接上干货! Editplus下载 第一步:进入官网 https://www.editplus.com/ 第二步:下载 https://www.editplus.com/download.ht ...

  7. localStorage兼容方案

    localStorage是H5的存储方案,各大浏览器支持都相当不错,唯一悲催的就是IE,这个浏览器界的另类总是显得格格不入. IE “Internet选项”->“安全”中有一个“启动保护模式”的 ...

  8. 最新CSS兼容方案

    CSS兼容方案,让你的样式完美兼容各大浏览器,这个方案主要是用来解决Safari的,Opear是在测试的时候顺带试了一下,结果发现竟然也行,所以顺便也解决了. .e {/*FF OP*/ color: ...

  9. 洛谷 P2756 飞行员配对方案问题 (二分图/网络流,最佳匹配方案)

    P2756 飞行员配对方案问题 题目背景 第二次世界大战时期.. 题目描述 英国皇家空军从沦陷国征募了大量外籍飞行员.由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的2 名飞行员,其 ...

随机推荐

  1. HDU 4729 An Easy Problem for Elfness(主席树)(2013 ACM/ICPC Asia Regional Chengdu Online)

    Problem Description Pfctgeorge is totally a tall rich and handsome guy. He plans to build a huge wat ...

  2. JVM(1)——简介

    网上流传着一段挺有意思的话-- 对于从事C或C++的开发人员来说,他们既是内存管理的最高权力的皇帝,也是最基础的劳动人民,担负着每一个对象生命开始到终结的维护工作,有点光杆司令的赶脚. 但对于java ...

  3. Java IO 小结

    Java IO 的学习需要明白流设计的体系结构,这样才能在实际需要的时候,通过API文档查阅,快速实现功能.

  4. BZOJ4373 算术天才⑨与等差数列(线段树)

    看上去很难维护,考虑找一些必要条件.首先显然最大值-最小值=k*(r-l).然后区间内的数需要模k同余.最后区间内的数两两不同(k=0除外).冷静一下可以发现这些条件组合起来就是充分的了. 考虑怎么维 ...

  5. Git 删除服务器的远程分支

    git push origin :分支名 可能会出现,在A机子操作,刷新下成功删除,但在B机子上还显示,再用下命令提示不存在该分支,只要再推送一个任意分支即可正常显示

  6. 【题解】HAOI2008硬币购物

    1A什么的实在是太开心啦~~洛谷P1450 这道题目主要是考察对于容斥原理的掌握. 首先,注意到如果不存在有关硬币数量的限制而单纯询问方案的总数,就是一个简单的完全背包.这个思路提醒我们:如果能够求出 ...

  7. VS查看DLL接口

    应用程序Microsoft Visual Studio 2010的Visual Studio Tools文件夹中打开Visual Studio Command Prompt (2010)命令窗口 du ...

  8. 【luogu 1439 最长公共子序列】

    题目描述 给出1-n的两个排列P1和P2,求它们的最长公共子序列. 输入输出格式 输入格式: 第一行是一个数n, 接下来两行,每行为n个数,为自然数1-n的一个排列. 输出格式: 一个数,即最长公共子 ...

  9. 如何最快地实现 ALTER TABLE

    如果您不了解ALTER TABLE的语法,可以先参考: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html 使用ALTER TABLE 可以 ...

  10. 接口认证方式:Bearer Token

    因为HTTP协议是开放的,可以任人调用.所以,如果接口不希望被随意调用,就需要做访问权限的控制,认证是好的用户,才允许调用API. 目前主流的访问权限控制/认证模式有以下几种: 1),Bearer T ...