(二)给IE6-IE9中的input添加HTML5新属性-placeholder

  同样是最近遇到的一个小问题。因为IE9以下input是不支持placeholder属性的。在网上找到了解决方案,果断带走。正如鲁迅先生所说的‘拿来主义’:运用脑髓,放出眼光,自己来拿!感谢。借花献佛在这里记录分享下。

  用法很简单,在代码中引入placeholder.js,并加入后面的一段代码就行了。

 1 <script src="jquery-1.11.3.js"></script>
 2 <!--IE8-IE6支持html5 placeholder新属性 引入脚本及相应功能代码-->
 3 <script src="placeholder.js"></script>
 4 <script>
 5 //    使IE8-IE6支持html5 placeholder新属性
 6     $(function(){
 7         var support = (function(input) {
 8             return function(attr) { return attr in input }
 9         })(document.createElement(‘input‘))
10         if ( !(support(‘placeholder‘) && $.browser.webkit) ) {
11             $(‘input[placeholder],textarea[placeholder]‘).placeholder({
12                 useNative: false,
13                 hideOnFocus: false,
14                 style: {
15                     textShadow: ‘none‘
16                 }
17             });
18         }
19
20         if ( !support(‘autofocus‘) ) {
21             $(‘input[autofocus]‘).focus()
22         }
23     });

其中placeholder.js的源码如下:

  1 (function ($) {
  2     var attr = ‘placeholder‘, nativeSupported = attr in document.createElement(‘input‘)
  3
  4     $.fn.placeholder = function (options) {
  5         return this.each(function () {
  6             var $input = $(this)
  7
  8             if ( typeof options === ‘string‘ ) {
  9                 options = { text: options }
 10             }
 11
 12             var opt = $.extend({
 13                 text     : ‘‘,
 14                 style    : {},
 15                 namespace: ‘placeholder‘,
 16                 useNative: true,
 17                 hideOnFocus: true
 18             }, options || {})
 19
 20             if ( !opt.text ) {
 21                 opt.text = $input.attr(attr)
 22             }
 23
 24             if (!opt.useNative) {
 25                 $input.removeAttr(attr)
 26             }else if ( nativeSupported ) {
 27
 28                 $input.attr(attr, opt.text)
 29                 return
 30             }
 31
 32             var width     = $input.width(), height = $input.height()
 33             var box_style = [‘marginTop‘, ‘marginLeft‘, ‘paddingTop‘, ‘paddingLeft‘, ‘paddingRight‘]
 34
 35             var show      = function () { $layer.show() }
 36             var hide      = function () { $layer.hide() }
 37             var is_empty  = function () { return !$input.val() }
 38             var check     = function () { is_empty() ? show() : hide() }
 39
 40             var position  = function () {
 41                 var pos = $input.position()
 42                 if (!opt.hideOnFocus) {
 43
 44                     pos.left += 2
 45                 }
 46                 $layer.css(pos)
 47                 $.each(box_style, function (i, name) {
 48                     $layer.css(name, $input.css(name))
 49                 })
 50             }
 51
 52             var layer_style = {
 53                 color     : ‘gray‘,
 54                 cursor    : ‘text‘,
 55                 textAlign : ‘left‘,
 56                 position  : ‘absolute‘,
 57                 fontSize  : $input.css(‘fontSize‘),
 58                 fontFamily: $input.css(‘fontFamily‘),
 59                 display   : is_empty() ? ‘block‘ : ‘none‘
 60             }
 61
 62
 63             var layer_props = {
 64                 text  : opt.text,
 65                 width : width,
 66                 height: ‘auto‘
 67             }
 68
 69
 70             var ns = ‘.‘ + opt.namespace, $layer = $input.data(‘layer‘ + ns)
 71             if (!$layer) {
 72                 $input.data(‘layer‘ + ns, $layer = $(‘<div>‘, layer_props).appendTo($input.offsetParent()) )
 73             }
 74
 75
 76             $layer
 77                 .css($.extend(layer_style, opt.style))
 78                 .unbind(‘click‘ + ns)
 79                 .bind(‘click‘ + ns, function () {
 80                     opt.hideOnFocus && hide()
 81                     $input.focus()
 82                 })
 83
 84             $input
 85                 .unbind(ns)
 86                 .bind(‘blur‘ + ns, check)
 87
 88             if (opt.hideOnFocus) {
 89                 $input.bind(‘focus‘ + ns, hide)
 90             }else{
 91                 $input.bind(‘keypress keydown‘ + ns, function(e) {
 92                     var key = e.keyCode
 93                     if (e.charCode || (key >= 65 && key <=90)) {
 94                         hide()
 95                     }
 96                 })
 97                     .bind(‘keyup‘ + ns,check)
 98             }
 99
100            101
102             $input.get(0).onpropertychange = check
103
104             position()
105             check()
106         })
107     }
108
109 })(jQuery)

  有时候,并不需要把所有的都弄的一清二楚,不可能也没必要。更应该把精力放在对自己来说更合适更有意义更有价值的地方

时间: 2024-09-30 19:17:48

(二)给IE6-IE9中的input添加HTML5新属性-placeholder的相关文章

HTML中使用&lt;input&gt;添加的按钮打开一个链接

在HTML中,<form>表单的<input type="button">可以添加一个按钮.如果想让该按钮实现<a> 的超链接功能,需要如下实现: 在新的窗口中打开页面(target = blank):<input type="button" onclick="window.open('new.jsp')"> 在当前窗口中打开页面(target = self)  :  <input type=

小习html5为表单添加的新属性

输入框html5新增属性 在学习任何一种语言时都提到“渐进增强”原则,说白了就是兼容性有木有.虽然html5一些新属性在实际使用中受到限制,但是依然阻挡不了伟大的同伴们学习的脚步.近来有点儿忙,这是2016年第一篇文章.内容比较简单只是了解学习. 输入框按输入的内容分,也就是单行输入和多行输入,既是<input type="">和<textarea></textarea> <textarea></textarea>标签属性 a

vue 中contenteditable=&quot;true&quot;添加可编辑属性后v-model双向绑定失效的解决办法

在项目中会遇到需要编辑单元格的双向绑定问题,v-model双向绑定会在添加contenteditable="true"属性后失效解决方法如下,亲测好用(v-html和@blur实现): <td class="width90" contenteditable="true" v-html="name3.LastProduct" @blur="name3.LastProduct=$event.target.inner

js动态添加未知新属性

1 前言 由于项目需要,需要实现获取服务器不同网卡扫局域网中的某种类型设备,然而不同服务器的网卡个数是不相同的,从而需要动态增加未知属性来统计不同网卡扫到的设备个数. 2 代码 function nicClassify(json){ var ret = {}; var jsonArr = json.split(","); var setArr = uniqueArr(jsonArr); var map={}; if(json == ""){ return ret;

HTML5新属性在Google浏览器中不能显示的问题

这两天在学习HTML5新属性时遇到了如下问题,很是不解: 例如在学习使用canvas时,需要绘制一个红色的原点,代码如下: 1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>HTML5画布</title> 6 </head> 7 8 <body> 9 <!--定义一块画布--> 10 <

Hadoop学习笔记—13.分布式集群中的动态添加与下架

开篇:在本笔记系列的第一篇中,我们介绍了如何搭建伪分布与分布模式的Hadoop集群.现在,我们来了解一下在一个Hadoop分布式集群中,如何动态(不关机且正在运行的情况下)地添加一个Hadoop节点与下架一个Hadoop节点. 一.实验环境结构 本次试验,我们构建的集群是一个主节点,三个从节点的结构,其中三个从节点的性能配置各不相同,这里我们主要在虚拟机中的内存设置这三个从节点分别为:512MB.512MB与256MB.首先,我们暂时只设置两个从节点,另外一个作为动态添加节点的时候使用.主节点与

html5中关于input用法的改变

测试环境:Firefox 10.0.Safari 5.1.Opera 11.61, Chrome 14.0.835.202 自己测试的时候都有写在form表单里,有提交按钮验证.因为对博客使用还不是很熟练,发博文的时候只有舍弃submit验证.大家在本地练习的时候可以写上submit验证,看各个浏览器的对这些新增的类型验证的区别. 一.新增的属性和属性值 在HTML5中,大幅度地增加与改良了input属性的种类,可以简单的使用这些属性来实现之前需要使用JavaScript才能实现的.对于html

HTML5中新增的语义化标签,及在IE5.5~9(IE9已经开始支持部分HTML5新标签了)支持这些新标签的兼容性处理。

一.前言 本文将介绍HTML5中新增的语义化标签,及在IE5.5~9(IE9已经开始支持部分HTML5新标签了)支持这些新标签的兼容性处理. 目录一坨: 二.语义化标签:article.aside.time.mark.section.header.footer.hgroup.progress.figure.figcaption.nav.meter.output.details.summary.ruby和main   三.让IE5.5~9支持HTML5新标签 1. IE5.5~8下对于不支持的标签

在IE9中实现placeholder功能

placeholder是文本框用来提示内容的属性,比如: <input id="txt" type="text" name="account" placeholder="请输入帐号"> 会显示为: 然而IE9不支持此属性,可以使用js来简单模拟placeholder行为. 我的基本思路是为输入框设置value值,并设置字体颜色,根据输入框内容模拟placeholder. 对于密码输入框placeholder属性的实