两种方法基于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 29 Javascript
JS简单操作select和dropdownlist实例
Nov 26 Javascript
js中setTimeout()与clearTimeout()用法实例浅析
May 12 Javascript
javascript日期处理函数,性能优化批处理
Sep 06 Javascript
AngularJS 表达式详细讲解及实例代码
Jul 26 Javascript
javascript轮播图算法
Oct 21 Javascript
webpack入门必知必会
Jan 16 Javascript
Angular2下使用pdf插件的方法详解
Apr 29 Javascript
Vue数据绑定简析小结
May 07 Javascript
Vue.js组件props数据验证实现详解
Oct 19 Javascript
vue使用echarts实现水平柱形图实例
Sep 09 Javascript
原生JavaScript实现五子棋游戏
Nov 09 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
2019年漫画销量排行榜:鬼灭登顶 海贼单卷制霸 尾田盛赞鬼灭
2020/03/08 日漫
当年上海收录机产品生产,进口和价格情况
2021/03/04 无线电
基于MySQL分区性能的详细介绍
2013/05/02 PHP
PHP 使用header函数设置HTTP头的示例解析 表头
2013/06/17 PHP
PHP字符串的递增和递减示例介绍
2014/02/11 PHP
phpExcel中文帮助手册之常用功能指南
2014/08/18 PHP
php使用str_replace实现输入框回车替换br的方法
2014/11/24 PHP
Yii框架防止sql注入,xss攻击与csrf攻击的方法
2016/10/18 PHP
用htc组件制作windows选项卡
2007/01/13 Javascript
JavaScript类库D
2010/10/24 Javascript
瀑布流布局代码一例
2014/04/11 Javascript
使用jQuery实现图片遮罩半透明坠落遮挡
2015/03/16 Javascript
javascript实现的固定位置悬浮窗口实例
2015/04/30 Javascript
原生JS实现垂直手风琴效果
2017/02/19 Javascript
Bootstrap模态框插入视频的实现代码
2017/06/25 Javascript
基于jquery.page.js实现分页效果
2018/01/01 jQuery
微信jssdk逻辑在vue中的运用详解
2018/11/14 Javascript
Elementui表格组件+sortablejs实现行拖拽排序的示例代码
2019/08/28 Javascript
layui table 多行删除(id获取)的方法
2019/09/12 Javascript
jquery 时间戳转日期过程详解
2019/10/12 jQuery
[14:00]DOTA2国际邀请赛史上最长大战 赛后专访B神
2013/08/10 DOTA
python网络爬虫之如何伪装逃过反爬虫程序的方法
2017/11/23 Python
Python Cookie 读取和保存方法
2018/12/28 Python
python把转列表为集合的方法
2019/06/28 Python
opencv导入头文件时报错#include的解决方法
2019/07/31 Python
python的scipy实现插值的示例代码
2019/11/12 Python
Python多线程实现支付模拟请求过程解析
2020/04/21 Python
python 多线程共享全局变量的优劣
2020/09/24 Python
简单掌握CSS3将文字描边及填充文字颜色的方法
2016/03/07 HTML / CSS
HTML中meta标签及Keywords
2020/04/15 HTML / CSS
Gap工厂店:Gap Factory
2017/11/02 全球购物
阿联酋优惠券服务:Living Kool
2019/12/12 全球购物
掌上明珠Java程序员面试总结
2016/02/23 面试题
工伤事故赔偿协议书
2014/04/15 职场文书
高一地理教学工作总结
2015/08/12 职场文书
Python答题卡识别并给出分数的实现代码
2021/06/22 Python