资讯专栏INFORMATION COLUMN

placeholder的兼容处理

beita / 3191人阅读

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

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

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

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

方法一

效果预览:

http://jsfiddle.net/L57b25yr/...

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

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

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

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

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

HTML:


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

背景图如下:

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

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

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

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

此方法的缺点是:需要为每一个提示文字不同的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下显示效果:

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/82423.html

相关文章

  • IE 8 浏览器 placeholder 兼容处理

    摘要:经过不断的尝试和参考别的产品在下兼容处理。我整理下,具体见下兼容处理通过处理时和时来控制文本的显示和隐藏。其中关键的时和。在父子元素中生效,需要在父级元素设置手机号邮箱密码希望能够对大家有帮助。 写在前面 由于公司的产品需要兼容 IE8 浏览器,在做登陆时,发现一个问题,placeholder 在input = text 情况下,显示还算正常,但在 input = password 就...

    vboy1010 评论0 收藏0
  • IE 8 浏览器 placeholder 兼容处理

    摘要:经过不断的尝试和参考别的产品在下兼容处理。我整理下,具体见下兼容处理通过处理时和时来控制文本的显示和隐藏。其中关键的时和。在父子元素中生效,需要在父级元素设置手机号邮箱密码希望能够对大家有帮助。 写在前面 由于公司的产品需要兼容 IE8 浏览器,在做登陆时,发现一个问题,placeholder 在input = text 情况下,显示还算正常,但在 input = password 就...

    zqhxuyuan 评论0 收藏0
  • IE 8 浏览器 placeholder 兼容处理

    摘要:经过不断的尝试和参考别的产品在下兼容处理。我整理下,具体见下兼容处理通过处理时和时来控制文本的显示和隐藏。其中关键的时和。在父子元素中生效,需要在父级元素设置手机号邮箱密码希望能够对大家有帮助。 写在前面 由于公司的产品需要兼容 IE8 浏览器,在做登陆时,发现一个问题,placeholder 在input = text 情况下,显示还算正常,但在 input = password 就...

    Chiclaim 评论0 收藏0
  • ie8兼容问题

    input标签placeholder 1.input里面的placeholder属性,在pc端用的特别好,但是万恶的ie8,placeholder竟然不支持。于是找到一种方法解决在ie8中placeholder无效的事 $(function() { // 如果不支持placeholder,用jQuery来完成 if(!isSupportPlaceholder()) { ...

    Worktile 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<