解决IE兼容实现HTML5的placeholder的问题

只要用过表单中的placeholder的前端同学,就会发现它的强大之处,再也不用写一些超多事件的JS来实现,而这个属性却不能被脑残的IE低版本所支持,我们只能想一些办法来变通一下。

一、JQ方式实现(不支持password类型)

 代码如下 复制代码
<script type="text/javascript">  
  if( !('placeholder' in document.createElement('input')) ){  
    $('input[placeholder],textarea[placeholder]').each(function(){   
      var that = $(this),   
      text= that.attr('placeholder');   
      if(that.val()===""){   
        that.val(text).addClass('placeholder');   
      }   
      that.focus(function(){   
        if(that.val()===text){   
          that.val("").removeClass('placeholder');   
        }   
      })   
      .blur(function(){   
        if(that.val()===""){   
          that.val(text).addClass('placeholder');   
        }   
      })   
      .closest('form').submit(function(){   
        if(that.val() === text){   
          that.val('');   
        }   
      });   
    });   
  }  
</script>

上面的方法缺点就是不能支持password类型的文本框,目前还没有很好的解决办法。

二、使用JQ插件jquery.placeholer.js

Github地址:https://github.com/tonitech/jquery.placeholder.js   引入到页面然后执行下面的代码:

 代码如下 复制代码
<script type="text/javascript">
$(function() {
 $('input, textarea').placeholder();
});
</script>

这个方法比较简单,唯一令我不喜欢的是它要求jquery版本1.3到1.8,而我现在在项目中使用的是1.11,所以无奈我没有使用,如果你的项目使用的是1.3-1.8版本的,可以尝试下。

三、原生JS通过Label标签实现

 代码如下 复制代码
<script type="text/javascript">
var funPlaceholder = function(element) { 
    //检测是否需要模拟placeholder 
    var placeholder = ''; 
    if (element && !("placeholder" in document.createElement("input")) && (placeholder = element.getAttribute("placeholder"))) { 
        //当前文本控件是否有id, 没有则创建 
        var idLabel = element.id ; 
        if (!idLabel) { 
            idLabel = "placeholder_" + new Date().getTime(); 
            element.id = idLabel; 
        } 
        //创建label元素 
        var eleLabel = document.createElement("label"); 
        eleLabel.htmlFor = idLabel; 
        eleLabel.style.position = "absolute"; 
        //根据文本框实际尺寸修改这里的margin值 
        eleLabel.style.margin = "8px 0 0 3px"; 
        eleLabel.style.color = "graytext"; 
        eleLabel.style.cursor = "text"; 
        //插入创建的label元素节点 
        element.parentNode.insertBefore(eleLabel, element); 
        //事件 
        element.onfocus = function() { 
            eleLabel.innerHTML = ""; 
        }; 
        element.onblur = function() { 
            if (this.value === "") { 
                eleLabel.innerHTML = placeholder; 
            } 
        }; 
        //样式初始化 
        if (element.value === "") { 
            eleLabel.innerHTML = placeholder; 
        } 
    } 
}; 
funPlaceholder(document.getElementsByName("username")[0]); 
funPlaceholder(document.getElementsByName("password")[0]); 
</script>

这个方法我现在在用,而且还是原生的,感觉很不错,推荐给大家。

时间: 2024-10-30 11:39:16

解决IE兼容实现HTML5的placeholder的问题的相关文章

Html5的placeholder属性(IE兼容)实现代码_jquery

HTML5对Web Form做了许多增强,比如input新增的type类型.Form Validation等. Placeholder是HTML5新增的另一个属性,当input或者textarea设置了该属性后,该值的内容将作为灰字提示显示在文本框中,当文本框获得焦点时,提示文字消失.以前要实现这效果都是用JavaScript来控制才能实现 , firefox.google chrome等表示对其支持 , 唯独IE存在违和感啊! 例如: <input id="t1" type=&

一句代码解决IE8兼容问题

IE更新的速度实在太快了,ie7还未普及,ie8就来了,这样广大的站长朋友就有的辛苦了,要计划网站的重新改版了,而这篇文章就是寻求最简单的方法解决ie8兼容问题,当然这只是最简单的方法解决了兼容问题,而不是从根本上解决了兼容问题.众所周之,符合编码规范才能真正解决浏览器兼容问题. 方法一.要在页面中加入如下HTTP meta-tag: <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />

完美解决IE兼容模式问题

IE浏览器从IE8开始添加了兼容模式,开启后会以低版本的IE进行渲染.兼容模式有可能会导致网页显示出问题,于是我们通常在HTML中添加下列代码来使 IE 使用固定的渲染模式:   复制代码 代码如下: <metahttp-equiv="X-UA-Compatible"content="IE=8"><!--以IE8模式渲染--> <metahttp-equiv="X-UA-Compatible"content=&quo

Windows 7如何解决软件兼容问题?

  问:Windows 7如何解决软件兼容问题? 答:微软Vista之所以没有XP成功,正是由于其兼容性的诟病.所以对于Windows7,微软在程序兼容性下大下功夫,首先对于能正常运行在Vista上的程序,Windows7保证都可以兼容.但是对于那些能运行在XP上,却不能运行在Vista上的程序,Windows7也不能兼容.对于不兼容的程序,我们可以尝试利用兼容性模式来运行,具体做法是: 右键单击需要在兼容模式下运行的程序,选择属性一项(菜单的最后一个),然后切换到兼容性标签,如下图就可以选择,

浅谈解决360兼容模式浏览器的方法_相关技巧

一.renderer <meta name="renderer" content="webkit|ie-comp|ie-stand"> 为双核浏览器准备的:指定双核浏览器默认以何种方式渲染页面. <meta name="renderer" content="webkit">//默认webkit内核 <meta name="renderer" content="ie-c

html5中placeholder兼容js代码

在做项目时,特别对于登录,注册一些重要提示,一般都是使用placeholder属性,可以实现输入时提示信息消失,失去焦点后提示信息显示,只是这个属性也存在不够兼容: 下面的代码可以尝试去用jQuery来完成不支持placeholder的时候. 注意:对于密码框需要单独进行处理,另外,input 框里的文字样式可能需要另加修改. 自己可以在这段代码的基础上进行改善,以达到自己需要的效果. $(function() { // 如果不支持placeholder,用jQuery来完成 if(!isSup

网页的兼容问题:解决JS兼容IE不兼容其它浏览器

文章简介:解决javascript不兼容除IE外其他浏览器问题. 今天,老大要我处理一个网站的兼容问题,一般兼容性问题是兼容其他浏览器,就IE不兼容,而这个有点特殊,只兼容IE,不兼容其他浏览器.初步观察以后,我发现是Javacript的问题.而不关div和css什么事情. 这是原来的代码: <SCRIPT language=JavaScript>marqueesHeight=550;stopscroll=false; with(flash){style.width=235;style.hei

解决DWR CS5安装html5插件提示:没有签名,不能安装的问题

从昨天晚上到今天早上,下载了好几个有关html5插件的ZXP文件,但是安装的时候总是提示,没有签名,不能安装该扩展,很是纠结啊,后来也是看到需要将DWR cs5更新一下,于是就去了官网下了一个更新程序AdobeDreamweaver-11-0-All-Update.zip,把DWR cs5更新之后,再次打开的时候,就会自动安装这个更新插件,同时也附带的有html5的功能,就解决了这个问题. 首先解压这个压缩包,打开之后里边有个AdobePatchInstaller.exe的执行文件,直接点击更新

vagrant建立映射目录解决环境兼容问题

使用Vagrant装虚拟机的童鞋应该知道在Vagrantfile文件中可以定义本机和虚拟机目录映射,如: config.vm.synced_folder "../website", "/usr/share/nginx/html" 表示把本机的当前文件目录下website目录映射到虚拟机的指定目录,这样在虚拟机中该目录的内容即是website目录下的,也就是实现了目录共享. 本文不介绍如在vagrantfile中指定同步目录,而是使用目录映射的方式解决一个开发环境和本