两种方法基于jQuery实现IE浏览器兼容placeholder效果
placeholder是HTML5<input>的属性之一,在不同的浏览器(支持HTML5的现代浏览器)中会有略微不同的显示效果:
在Chrome(v31.0.1650.63m)、Firefox(v21.0)、360安全(v6.3极速模式)中,输入栏获得焦点后,提示文字并不消失,如图(Chrome):
获得焦点前:
获得焦点时:
偏偏IE11要搞点特殊:
获得焦点前:
获得焦点时:
也就是说获得焦点时提示的文字会消失。
非现代浏览器(例如IE6-IE9)是不支持placeholder属性的。现在用jQuery来使这些非现代浏览器也同样能能实现placeholder的显示效果,第一种方法实现的是IE11这种效果,也就是输入框获得焦点时提示文字会消失;如果要想获得类似Chrome的效果,即输入框获得焦点时提示文字并不消失,可以使用第二种方法。
方法一
效果预览:
http://jsfiddle.net/L57b25yr/embedded/result/
思路是,首先判断浏览器是否支持placeholder属性,如果不支持的话,就遍历所有input输入框,获取placeholder属性的值填充进输入框作为提示信息,同时字体设置成灰色。
当输入框获得焦点(focus)同时输入框内文字等于设置的提示信息时,就把输入框内清空;
当输入框失去焦点(blur)同时输入框内文字为空时,再把获取的placeholder属性的值填充进输入框作为提示信息,同时字体设置成灰色;
当输入框内有输入(keydown)时,此时输入框内的提示信息已经由focus事件清除,此时只需要把字体再恢复成黑色即可。
此方法的缺点是,不适用于加载完DOM时即获得焦点的输入框,因为在用户的角度,加载完页面时看到的获得焦点的那个输入框,它的提示文字是看不到的。
HTML:
<inputtype="text"id="uname"name="uname"placeholder="请输入用户名"/>
CSS:
.phcolor{color:#999;}
JS:
$(function(){ //判断浏览器是否支持placeholder属性 supportPlaceholder="placeholder"indocument.createElement("input"), placeholder=function(input){ vartext=input.attr("placeholder"), defaultValue=input.defaultValue; if(!defaultValue){ input.val(text).addClass("phcolor"); } input.focus(function(){ if(input.val()==text){ $(this).val(""); } }); input.blur(function(){ if(input.val()==""){ $(this).val(text).addClass("phcolor"); } }); //输入的字符不为灰色 input.keydown(function(){ $(this).removeClass("phcolor"); }); }; //当浏览器不支持placeholder属性时,调用placeholder函数 if(!supportPlaceholder){ $("input").each(function(){ text=$(this).attr("placeholder"); if($(this).attr("type")=="text"){ placeholder($(this)); } }); } });
经过测试可以达到IE11placeholder的显示效果。
方法二
此方法的思路是做一张含有提示文字的图片作为input输入框的背景图,初始时获得焦点同时加载背景图;
背景图如下:
当输入框不为空时,去掉背景图;
当输入框为空时,加载背景图;
当用户键盘按键且输入框不为空(输入字符)时,去掉背景图;
当用户键盘按键且输入框为空(删除字符)时,加载背景图。
此方法的缺点是:需要为每一个提示文字不同的input制作背景图片,并且设置input的样式。
HTML代码不变。
CSS:
.phbg{background:url(img/bg.jpg)00no-repeat;}
JS:
$(function(){ //判断浏览器是否支持placeholder属性 supportPlaceholder="placeholder"indocument.createElement("input"); if(!supportPlaceholder){ //初始状态添加背景图片 $("#uname").attr("class","phbg"); //初始状态获得焦点 $("#uname").focus; functiondestyle(){ if($("#uname").val()!=""){ $("#uname").removeClass("phbg"); }else{ $("#uname").attr("class","phbg"); } } //当输入框为空时,添加背景图片;有值时去掉背景图片 destyle(); $("#uname").keyup(function(){ //当输入框有按键输入同时输入框不为空时,去掉背景图片;有按键输入同时为空时(删除字符),添加背景图片 destyle(); }); $("#uname").keydown(function(){ //keydown事件可以在按键按下的第一时间去掉背景图片 $("#uname").removeClass("phbg"); }); } });
此方法至此结束。
此方法在IETester的IE8下显示效果:
获得焦点时:
失去焦点时:
有输入时:
如果有朋友有更好的方法,欢迎交流讨论。
相关文章
- JQuery的父、子、兄弟节点查找,节点的子节点循环详解编程语言
- Jquery常用方法详解编程语言
- jQuery幻灯片插件Skippr详解编程语言
- jQuery animate()方法详解
- jQuery $.merge()方法合并数组
- jQuery $.ajax()方法的使用
- 传递参数的标准方法(jQuery.ajax)
- JQuery获取和设置Select选项的代码
- jsTree基于JQuery的排序节点Bug
- jQuery中live方法的重复绑定说明
- jQuery控制图片的hover效果(smartRollover.js)
- jquery下checked取值问题的解决方法
- jquery连缀语法如何实现
- jquery多选项卡效果实例代码(附效果图)
- UpdatePanel和Jquery冲突的解决方法
- jQuery遍历-nextUntil()方法以及prevUntil()方法的使用介绍
- JQuery调webservice实现邮箱验证(检测是否可用)
- js(jQuery)获取时间的方法及常用时间类搜集
- 封装的jquery翻页滚动(示例代码)
- jquery中的on方法使用介绍
- jquery和雅虎的yql服务实现天气预报服务示例
- jquery单行文字向上滚动效果示例
- jQuery取id有.的值的方法
- 实例讲解JQuery中this和$(this)区别
- JQuery做的一个简单的点灯游戏分享
- Jquery实现兼容各大浏览器的Enter回车切换输入焦点的方法