两种方法基于jQuery实现IE浏览器兼容placeholder效果


Posted in Javascript onOctober 14, 2014

placeholder是HTML5<input>的属性之一,在不同的浏览器( 支持HTML5的现代浏览器 )中会有略微不同的显示效果:

在Chrome( v31.0.1650.63 m)、Firefox( v21.0 )、360安全( v6.3 极速模式 )中,输入栏获得焦点后,提示文字并不消失,如图( Chrome ):

获得焦点前:

两种方法基于jQuery实现IE浏览器兼容placeholder效果

获得焦点时:

两种方法基于jQuery实现IE浏览器兼容placeholder效果

偏偏IE11要搞点特殊:

获得焦点前:

两种方法基于jQuery实现IE浏览器兼容placeholder效果

获得焦点时:

两种方法基于jQuery实现IE浏览器兼容placeholder效果

也就是说获得焦点时提示的文字会消失。

非现代浏览器( 例如 IE6-IE9 )是不支持placeholder属性的。现在用jQuery来使这些非现代浏览器也同样能能实现placeholder的显示效果,第一种方法实现的是IE11这种效果,也就是输入框获得焦点时提示文字会消失;如果要想获得类似Chrome的效果,即输入框获得焦点时提示文字并不消失,可以使用第二种方法。

方法一

效果预览:

http://jsfiddle.net/L57b25yr/embedded/result/

思路是,首先判断浏览器是否支持placeholder属性,如果不支持的话,就遍历所有input输入框,获取placeholder属性的值填充进输入框作为提示信息,同时字体设置成灰色。

当输入框获得焦点( focus )同时输入框内文字等于设置的提示信息时,就把输入框内清空;

当输入框失去焦点( blur )同时输入框内文字为空时,再把获取的placeholder属性的值填充进输入框作为提示信息,同时字体设置成灰色;

当输入框内有输入( keydown )时,此时输入框内的提示信息已经由focus事件清除,此时只需要把字体再恢复成黑色即可。

此方法的缺点是,不适用于加载完DOM时即获得焦点的输入框,因为在用户的角度,加载完页面时看到的获得焦点的那个输入框,它的提示文字是看不到的。

HTML:

<input type="text" id="uname" name="uname" placeholder="请输入用户名"/>

CSS:

.phcolor{ color:#999;}

JS:

$(function(){  

  //判断浏览器是否支持placeholder属性
  supportPlaceholder='placeholder'in document.createElement('input'),

  placeholder=function(input){

    var text = 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输入框的背景图,初始时获得焦点同时加载背景图;

背景图如下:

两种方法基于jQuery实现IE浏览器兼容placeholder效果

当输入框不为空时,去掉背景图;

当输入框为空时,加载背景图;

当用户键盘按键且输入框不为空( 输入字符 )时,去掉背景图;

当用户键盘按键且输入框为空( 删除字符 )时,加载背景图。

此方法的缺点是:需要为每一个提示文字不同的input制作背景图片,并且设置input的样式。

HTML代码不变。

CSS:

.phbg{ background:url(img/bg.jpg) 0 0 no-repeat;}

JS:

$(function(){  

   //判断浏览器是否支持placeholder属性
   supportPlaceholder='placeholder' in document.createElement('input');

   if(!supportPlaceholder){

     //初始状态添加背景图片
     $("#uname").attr("class","phbg");
     //初始状态获得焦点
     $("#uname").focus;

     function destyle(){
     
      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实现IE浏览器兼容placeholder效果

失去焦点时:

两种方法基于jQuery实现IE浏览器兼容placeholder效果

有输入时:

两种方法基于jQuery实现IE浏览器兼容placeholder效果

如果有朋友有更好的方法,欢迎交流讨论。

Javascript 相关文章推荐
JavaScript 字符串乘法
Aug 20 Javascript
基于jquery的一个OutlookBar类,动态创建导航条
Nov 19 Javascript
捕获键盘事件(且兼容各浏览器)
Jul 03 Javascript
JS网页播放声音实现代码兼容各种浏览器
Sep 22 Javascript
javascript实现控制div颜色
Jul 07 Javascript
js实现三张图(文)片一起切换的banner焦点图
Aug 25 Javascript
javascript实现二级级联菜单的简单制作
Nov 19 Javascript
JavaScript与ActionScript3两者的同性与差异性
Sep 22 Javascript
浅析jQuery操作select控件的取值和设值
Dec 07 Javascript
jquery 实现拖动文件上传加载进度条功能
Mar 18 jQuery
vue里面v-bind和Props 利用props绑定动态数据的方法
Aug 27 Javascript
javaScript 实现重复输出给定的字符串的常用方法小结
Feb 20 Javascript
网站基于flash实现的Banner图切换效果代码
Oct 14 #Javascript
jQuery 实现自动填充邮箱功能(带下拉提示)
Oct 14 #Javascript
js网页右下角提示框实例
Oct 14 #Javascript
兼容主流浏览器的jQuery+CSS 实现遮罩层的简单代码
Oct 14 #Javascript
从数据库读取数据后将其输出成html标签的三种方法
Oct 13 #Javascript
JavaScript使用循环和分割来替换和删除元素实例
Oct 13 #Javascript
javascript实现分栏显示小技巧附图
Oct 13 #Javascript
You might like
php比较两个绝对时间的大小
2014/01/31 PHP
php 将json格式数据转换成数组的方法
2018/08/21 PHP
JavaScript 加号(+)运算符号
2009/12/06 Javascript
javascript中substr,substring,slice.splice的区别说明
2010/11/25 Javascript
js网页版计算器的简单实现
2013/07/02 Javascript
JS图像无缝滚动脚本非常好用
2014/02/10 Javascript
javascript文本模板用法实例
2015/07/31 Javascript
如何利用JS通过身份证号获取当事人的生日、年龄、性别
2016/01/22 Javascript
20分钟成功编写bootstrap响应式页面 就这么简单
2016/05/12 Javascript
Javascript实现信息滚动效果
2017/05/18 Javascript
vue+axios实现登录拦截的实例代码
2017/05/22 Javascript
ReactNative踩坑之配置调试端口的解决方法
2017/07/28 Javascript
vue2.0 实现页面导航提示引导的方法
2018/03/13 Javascript
React父子组件间的传值的方法
2018/11/13 Javascript
使用Vue-Awesome-Swiper实现旋转叠加轮播效果&amp;平移轮播效果
2019/08/16 Javascript
[01:27]2014DOTA2展望TI 剑指西雅图IG战队专访
2014/06/30 DOTA
Python使用matplotlib填充图形指定区域代码示例
2018/01/16 Python
python re模块的高级用法详解
2018/06/06 Python
详解Python函数式编程—高阶函数
2019/03/29 Python
解决Python中报错TypeError: must be str, not bytes问题
2020/04/07 Python
Python实现ElGamal加密算法的示例代码
2020/06/19 Python
Python之字符串的遍历的4种方式
2020/12/08 Python
CSS3 clip-path 用法介绍详解
2018/03/01 HTML / CSS
HTML页面中添加Canvas标签示例
2015/01/01 HTML / CSS
英国鞋网:Rubber Sole
2020/03/03 全球购物
大三在校生电子商务求职信
2013/10/29 职场文书
开展创先争优活动总结
2014/08/28 职场文书
一份关于丢失公司财物的检讨书
2014/09/19 职场文书
2014年药店工作总结
2014/11/20 职场文书
办公室文员岗位职责
2015/02/04 职场文书
个人维稳承诺书
2015/05/04 职场文书
优化经济发展环境工作总结
2015/08/11 职场文书
大学生创业,为什么都会选择快餐饮?
2019/08/08 职场文书
phpQuery解析HTML乱码问题(补充官网未列出的乱码解决方案)
2021/04/01 PHP
使用Html+Css实现简易导航栏功能(导航栏遇到鼠标切换背景颜色)
2021/04/07 HTML / CSS
Python matplotlib安装以及实现简单曲线的绘制
2022/04/26 Python