两种方法基于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 相关文章推荐
JS之小练习代码
Oct 12 Javascript
js下拉菜单语言选项简单实现
Sep 23 Javascript
jquery使用append(content)方法注意事项分享
Jan 06 Javascript
在JavaScript中重写jQuery对象的方法实例教程
Aug 25 Javascript
JQuery实现当鼠标停留在某区域3秒后自动执行
Sep 09 Javascript
使用JS实现图片展示瀑布流效果(简单实例)
Sep 06 Javascript
JS中实现函数return多个返回值的实例
Feb 21 Javascript
vue组件间通信解析
Mar 01 Javascript
《javascript少儿编程》location术语总结
May 27 Javascript
通过封装scroll.js 获取滚动条的值
Jul 13 Javascript
Web安全之XSS攻击与防御小结
Dec 13 Javascript
微信小程序获取当前时间及星期几的实例代码
Sep 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技术开发技巧分享
2010/03/23 PHP
redis 队列操作的例子(php)
2012/04/12 PHP
解析php中array_merge与array+array的区别
2013/06/21 PHP
php实现的支持imagemagick及gd库两种处理的缩略图生成类
2014/09/23 PHP
IE浏览器中图片onload事件无效的解决方法
2014/04/29 Javascript
使用JQuery实现的分页插件分享
2015/11/05 Javascript
jQuery+PHP+MySQL实现无限级联下拉框效果
2016/02/19 Javascript
微信小程序 Record API详解及实例代码
2016/09/30 Javascript
JS实现字符串转驼峰格式的方法
2016/12/16 Javascript
常用JS图片滚动(无缝、平滑、上下左右滚动)代码大全(推荐)
2016/12/20 Javascript
Vue自定义指令拖拽功能示例
2017/02/17 Javascript
AngularJS解决ng-if中的ng-model值无效的问题
2017/06/21 Javascript
element 结合vue 在表单验证时有值却提示错误的解决办法
2018/01/22 Javascript
基于node打包可执行文件工具_Pkg使用心得分享
2018/01/24 Javascript
Express本地测试HTTPS的示例代码
2018/06/06 Javascript
VUE+Element UI实现简单的表格行内编辑效果的示例的代码
2018/10/31 Javascript
记录一次完整的react hooks实践
2019/03/11 Javascript
vue-cli3 配置开发与测试环境详解
2019/05/17 Javascript
[02:47]DOTA2亚洲邀请赛 HR战队出场宣传片
2015/02/07 DOTA
python统计日志ip访问数的方法
2015/07/06 Python
解析Python中while true的使用
2015/10/13 Python
Django应用程序中如何发送电子邮件详解
2017/02/04 Python
在Python中关于使用os模块遍历目录的实现方法
2019/01/03 Python
python中 * 的用法详解
2019/07/10 Python
Python定时任务APScheduler的实例实例详解
2019/07/22 Python
Python中list的交、并、差集获取方法示例
2019/08/01 Python
Python性能分析工具py-spy原理用法解析
2020/07/27 Python
汇智创新科技发展有限公司
2015/12/06 面试题
什么是命名空间(NameSpace)
2015/11/24 面试题
大学生党员自我批评
2014/02/14 职场文书
小学生演讲稿大全
2014/04/25 职场文书
计算机多媒体专业自荐信
2014/07/04 职场文书
个人欠款协议书范本2014
2014/11/02 职场文书
2014年教师业务工作总结
2014/12/19 职场文书
党风廉正建设责任书
2015/01/29 职场文书
2015年信贷员工作总结
2015/04/28 职场文书