tldr: 为什么(inputElemnt中的'placeholder')在IE8中等于true,尽管没有对占位符属性的本地支持?不是(元素中的属性)检查本机支持的好方法吗? Javascript库Modernizer使用它。Javascript检查在IE8中的原生占位符支持
长: 我有一个小的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(' '));
我错过了什么?
IE是无能的属性和特性,它认为它们是同一个东西(一样的jQuery)。非标准属性被添加为“expando”属性。使用for..in遍历主机对象的属性不是一个好主意。 IE <9不支持hasAttribute,所以也不起作用。 – RobG 2011-04-04 08:46:18
谢谢!您的评论导致了一个工作解决方案。 – janjarfalk 2011-04-04 10:16:18
占位符属性没有在IE9中实现... – 2011-04-04 12:15:34