HTML5 的 PLACEHOLDER 属性

小编辑 发布于 2011/06/29 14:58
阅读 31K+
收藏 18

HTML5对Web Form做了许多增强,比如input新增的type类型、Form Validation等。Placeholder是HTML5新增的另一个属性,当input或者textarea设置了该属性后,该值的内容将作为灰字提示显示在文本框中,当文本框获得焦点时,提示文字消失。以前要实现这效果都是用JavaScript来控制才能实现:

<input id="t1" type="text" placeholder="请输入文字" />

由于placeholder是个新增属性,目前只有少数浏览器支持,如何检测浏览器是否支持它呢?(更多HTML5/CSS3特性检测可以访问)

function hasPlaceholderSupport() {
  return 'placeholder' in document.createElement('input');
}

默认提示文字是灰色的,可以通过CSS来改变文字样式:

/* all */
::-webkit-input-placeholder { color:#f00; }
input:-moz-placeholder { color:#f00; }
 
/* individual: webkit */
#field2::-webkit-input-placeholder { color:#00f; }
#field3::-webkit-input-placeholder { color:#090; background:lightgreen; text-transform:uppercase; }
#field4::-webkit-input-placeholder { font-style:italic; text-decoration:overline; letter-spacing:3px; color:#999; }
 
/* individual: mozilla */
#field2:-moz-placeholder { color:#00f; }
#field3:-moz-placeholder { color:#090; background:lightgreen; text-transform:uppercase; }
#field4:-moz-placeholder { font-style:italic; text-decoration:overline; letter-spacing:3px; color:#999; }

兼容其他不支持placeholder的浏览器:

var PlaceHolder = {
    _support: (function() {
        return 'placeholder' in document.createElement('input');
    })(),
 
    //提示文字的样式,需要在页面中其他位置定义
    className: 'abc',
 
    init: function() {
        if (!PlaceHolder._support) {
            //未对textarea处理,需要的自己加上
            var inputs = document.getElementsByTagName('input');
            PlaceHolder.create(inputs);
        }
    },
 
    create: function(inputs) {
        var input;
        if (!inputs.length) {
            inputs = [inputs];
        }
        for (var i = 0, length = inputs.length; i <length; i++) {
            input = inputs[i];
            if (!PlaceHolder._support && input.attributes && input.attributes.placeholder) {
                PlaceHolder._setValue(input);
                input.addEventListener('focus', function(e) {
                    if (this.value === this.attributes.placeholder.nodeValue) {
                        this.value = '';
                        this.className = '';
                    }
                }, false);
                input.addEventListener('blur', function(e) {
                    if (this.value === '') {
                        PlaceHolder._setValue(this);
                    }
                }, false);
            }
        }
    },
 
    _setValue: function(input) {
        input.value = input.attributes.placeholder.nodeValue;
        input.className = PlaceHolder.className;
    }
};
 
//页面初始化时对所有input做初始化
//PlaceHolder.init();
//或者单独设置某个元素
//PlaceHolder.create(document.getElementById('t1'));
文章来自: http://blog.tugai.net/2011/02/17/html5-placeholder/

加载中
0
未央
未央
IE表示压力很大,chrome、firefox、safari表示毫无压力。50%以上的用户浏览器表示压力很大,这也是CSS3和HTML5不能迅速流行起来的原因
0
苗哥
苗哥
@小编辑 兼容其他不支持placeholder的浏览器中className为abc的那个CSS样式可否举个例子,谢谢!
苗哥
苗哥
这样来看的话,为了各版本浏览器的兼容性,暂时还不能直接使用placeholder这个属性了,仍然使用以前的方法比较稳妥。
小编辑
小编辑
你可以参考 oschina 首页那个搜索框的做法啊
0
陈大大
陈大大
IE9都不支持..
0
GF
GF
html5还需要浏览器的支持啊,还是得用一些老的方法!
0
GF
GF
IE9 不支持。
0
whboschina
whboschina
这样搞还不如直接用javascript控制简单。
0
wenyejie
wenyejie

return 'placeholder' in document.createElement('input');

这句话能检测浏览器是否支持placeholder,

请问怎么样检测浏览器是否支持type="url"类似于这样的验证

0
g
geson
做法太冗长,不科学。我试了class  abc。怎么没效果
0
Sam_min
Sam_min
这个要怎么 才有效果阿? 没反应阿?
返回顶部
顶部