长话短说: 为什么在 IE8 中 ('placeholder' in inputElemnt) 等于 true 尽管不支持 placeholder 属性? (元素中的属性)不是检查 native 支持的好方法吗? Javascript 库 Modernizer 使用它。
长:
我有一个名为 Defaultvalue (http://unwrongest.com/projects/defaultvalue/) 的小型 Jquery 插件。我有一个名为 Placeholder (https://github.com/janjarfalk/jquery.placeholder.js) 的小型 Jquery 插件。它基本上是 HTML5 占位符属性的后备。
在最近的更新中,我添加了这三行代码。希望如果浏览器对占位符属性具有 native 支持,则 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(' '));
我错过了什么?
最佳答案
创建一个新的原始输入元素解决了我的问题。
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,是你引导我实现的。
关于Javascript 检查 IE8 中的 native 占位符支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5536236/