两种方法基于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 相关文章推荐
jquery.tmpl JQuery模板插件
Oct 10 Javascript
jQuery给动态添加的元素绑定事件的方法
Mar 09 Javascript
详解Angular中$cacheFactory缓存的使用
Aug 19 Javascript
jQuery+CSS3实现仿花瓣网固定顶部位置带悬浮效果的导航菜单
Sep 21 Javascript
JS生成一维码(条形码)功能示例
Jan 19 Javascript
JS区分Object与Aarry的六种方法总结
Feb 27 Javascript
JS实现利用两个队列表示一个栈的方法
Dec 13 Javascript
微信小程序 如何引入外部字体库iconfont的图标
Jan 31 Javascript
javascript变量提升和闭包理解
Mar 12 Javascript
微信小程序框架wepy之动态控制类名
Sep 14 Javascript
node.js +mongdb实现登录功能
Jun 18 Javascript
浅谈vant组件Picker 选择器选单选问题
Nov 04 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
PHP4实际应用经验篇(7)
2006/10/09 PHP
浅析PHP中的字符串编码转换(自动识别原编码)
2013/07/02 PHP
Smarty foreach控制循环次数的实现详解
2013/07/03 PHP
JSON JQUERY模板实现说明
2010/07/03 Javascript
解析DHTML,JavaScript,DOM,BOM以及WEB标准的描述
2013/06/19 Javascript
浅谈jQuery异步对象(XMLHttpRequest)
2014/11/17 Javascript
Nodejs实现批量下载妹纸图
2015/05/28 NodeJs
详解bootstrap的modal-remote两种加载方式【强化】
2017/01/27 Javascript
详解VUE 定义全局变量的几种实现方式
2017/06/01 Javascript
解决微信二次分享不显示摘要和图片的问题
2017/08/18 Javascript
jquery.pager.js分页实现详解
2019/07/29 jQuery
详解vue+axios给开发环境和生产环境配置不同的接口地址
2019/08/16 Javascript
vue 组件销毁并重置的实现
2020/01/13 Javascript
[05:45]Ti4观战指南(下)
2014/07/07 DOTA
Python将列表数据写入文件(txt, csv,excel)
2019/04/03 Python
Python3 使用pillow库生成随机验证码
2019/08/26 Python
Django 对IP访问频率进行限制的例子
2019/08/30 Python
pandas中read_csv的缺失值处理方式
2019/12/19 Python
Pytorch 实现focal_loss 多类别和二分类示例
2020/01/14 Python
tensorflow -gpu安装方法(不用自己装cuda,cdnn)
2020/01/20 Python
详解CSS3开启硬件加速的使用和坑
2017/08/21 HTML / CSS
美国亚洲时尚和美容产品的一站式网上商店:Stylevana
2019/09/05 全球购物
Tessabit美国:集世界奢侈品和设计师品牌的意大利精品买手店
2020/06/29 全球购物
中国电子产品批发商/跨境电商/外贸网:Sunsky-online
2020/04/20 全球购物
男方父母证婚词
2014/01/12 职场文书
总经理文秘岗位职责
2014/02/03 职场文书
售后服务经理岗位职责
2014/02/25 职场文书
团队会宣传标语
2014/10/09 职场文书
普通党员整改措施
2014/10/24 职场文书
2015年企业新年寄语
2014/12/08 职场文书
大学毕业论文致谢词
2015/05/14 职场文书
李清照的诗词赏析(20首)
2019/08/22 职场文书
节约用水广告语60条
2019/11/14 职场文书
《刺客之王:C罗全景传记》:时代从来不会亏待手艺人
2019/11/28 职场文书
Nginx配置80端口访问8080及项目名地址方法解析
2021/03/31 Servers
Spring Boot项目如何优雅实现Excel导入与导出功能
2022/06/10 Java/Android