HTML5 INPUT placeholder及兼容性處理


HTML5對Web Form做了許多增強,比如input新增的type類型、Form Validation等。Placeholder是HTML5新增的另一個屬性,當input或者textarea設置了該屬性后,該值的內容將作為灰字提示顯示在文本框中,當文本框獲得焦點時,提示文字消失。以前要實現這效果都是用JavaScript來控制才能實現:

由於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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM