Javascript检查IE8中的本机占位符支持

jan*_*alk 15 javascript placeholder

tldr: 尽管没有对占位符属性的原生支持,为什么(在inputElemnt中'placeholder')在IE8中等于true?不是(元素中的属性)检查本机支持的好方法吗?Javascript库Modernizer使用它.

长: 我有一个名为Defaultvalue的小型Jquery插件(http://unwrongest.com/projects/defaultvalue/).我有一个名为Placeholder的小型Jquery插件(https://github.com/janjarfalk/jquery.placeholder.js).它基本上是HTML5占位符属性的后备.

在最近的更新中,我添加了这三行代码.希望如果浏览器本身支持占位符属性,则不会运行Defaultvalue.

if('placeholder' in this){
    // this is an input-element
    return false;
}

它似乎适用于除IE8和IE7之外的大多数浏览器.由于某种原因,它在此找到关键的"占位符",但我认为,IE7/IE8中没有对占位符属性的任何支持.

我的代码受到了Javascript库Modernizer(http://www.modernizr.com/)中此代码的启发.

(function(props) {
    for (var i = 0, len = props.length; i < len; i++) {
        attrs[ props[i] ] = !!(props[i] in inputElem);
    }
    return attrs;
})('autocomplete autofocus list placeholder max min multiple pattern required step'.split(' '));

我错过了什么?

jan*_*alk 14

创建一个新的原始输入元素解决了我的问题.

var nativePlaceholderSupport = (function() {
    var i = document.createElement('input');
    return i.placeholder !== undefined;
})();

if(nativePlaceholderSupport){
    return false;
}
var nativePlaceholderSupport = (function(){
    var i = document.createElement('input');
    return ('placeholder' in i);
})();

if(nativePlaceholderSupport){
    return false;
}

谢谢RobG,你带我去了.