15

tldr: 为什么 ('placeholder' in inputElemnt) 在 IE8 中等于 true,尽管不支持 placeholder 属性?(元素中的属性)不是检查本机支持的好方法吗?Javascript 库 Modernizer 使用它。

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

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

if('占位符'在这个){
    // 这是一个输入元素
    返回假;
}

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

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

(功能(道具){
    for (var i = 0, len = props.length; i < len; i++) {
        attrs[ props[i] ] = !!(props[i] in inputElem);
    }
    返回属性;
})('自动完成自动对焦列表占位符 max min multiple pattern required step'.split(' '));

我错过了什么?

4

2 回答 2

14

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

var nativePlaceholderSupport = (function() {
    var i = document.createElement('input');
    返回 i.placeholder !== 未定义;
})();

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

if(nativePlaceholderSupport){
    返回假;
}

谢谢RobG,你带我去了。

于 2011-04-04T10:19:23.147 回答
1

它没有。它在 IE9 和 IE8 中都等于 false。

现场演示:http: //jsfiddle.net/JVSgx/

于 2011-04-04T12:08:29.820 回答