两种方法基于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中查找最近的共有祖先元素的实现代码
Dec 30 Javascript
分享Javascript中最常用的55个经典小技巧
Nov 29 Javascript
全面解析Bootstrap布局组件应用
Feb 22 Javascript
JavaScript代码性能优化总结(推荐)
May 16 Javascript
vue2.0嵌套路由实现豆瓣电影分页功能(附demo)
Mar 13 Javascript
基于vue.js实现侧边菜单栏
Mar 20 Javascript
基于BootStrap的前端分页带省略号和上下页效果
May 18 Javascript
Bootstrap Table快速完美搭建后台管理系统
Sep 20 Javascript
浅谈Angular路由复用策略
Oct 04 Javascript
javascript标准库(js的标准内置对象)总结
May 26 Javascript
ng-alain表单使用方式详解
Jul 10 Javascript
vue-cli 3.x 配置Axios(proxyTable)跨域代理方法
Sep 19 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
getJSON跨域SyntaxError问题分析
2014/08/07 PHP
Yii2实现UploadedFile上传文件示例
2017/02/15 PHP
深入浅析安装PhpStorm并激活的步骤详解
2020/09/17 PHP
遍历DOM对象内的元素属性示例代码
2014/02/08 Javascript
JavaScript简单实现鼠标拖动选择功能
2014/03/06 Javascript
angularjs客户端实现压缩图片文件并上传实例
2015/07/06 Javascript
Bootstrap中CSS的使用方法
2016/02/17 Javascript
在Mac OS上安装使用Node.js的项目自动化构建工具Gulp
2016/06/18 Javascript
jquery easyui DataGrid简单示例
2017/01/23 Javascript
JS图片延迟加载插件LazyImgv1.0用法分析【附demo源码下载】
2017/09/04 Javascript
JS简单生成由字母数字组合随机字符串示例
2018/05/25 Javascript
利用jsonp解决js读取本地json跨域的问题
2018/12/11 Javascript
浅谈小程序globalData的那些事儿
2019/11/01 Javascript
微信小程序利用button控制条件标签的变量问题
2020/03/15 Javascript
python中的sort方法使用详解
2014/07/25 Python
详细探究Python中的字典容器
2015/04/14 Python
利用Anaconda完美解决Python 2与python 3的共存问题
2017/05/25 Python
Python批量查询域名是否被注册过
2017/06/21 Python
Python实现文件压缩和解压的示例代码
2020/08/12 Python
Lacoste澳大利亚官网:服装、鞋类及配饰
2018/11/14 全球购物
德国家用电器购物网站:Premiumshop24
2019/08/22 全球购物
javascript实现用户必须勾选协议实例讲解
2021/03/24 Javascript
应届大专毕业生个人自荐信
2013/09/22 职场文书
七年级音乐教学反思
2014/01/26 职场文书
KTV的创业计划书范文
2014/02/02 职场文书
同事吵架检讨书
2014/02/05 职场文书
手机被没收的检讨书
2014/10/04 职场文书
中学生旷课检讨书500字
2014/10/29 职场文书
2014年保安个人工作总结
2014/11/13 职场文书
主题班会开场白
2015/06/01 职场文书
2016年秋季运动会广播稿
2015/12/21 职场文书
乡镇团代会开幕词
2016/03/04 职场文书
MySQL锁机制
2021/04/05 MySQL
如何使用PyCharm及常用配置详解
2021/06/03 Python
MySQL中in和exists区别详解
2021/06/03 MySQL
SpringBoot项目部署到阿里云服务器的实现步骤
2022/06/28 Java/Android