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