Проверка Javascript для поддержки родного заполнителя в IE8
TL;DR:
Почему ( "placeholder" in inputElemnt) равно true в IE8, несмотря на отсутствие встроенной поддержки атрибута placeholder? Разве нет (атрибут в элементе) хороший способ проверить встроенную поддержку? Модернизатор библиотеки JavaScript использует его.
Long
У меня есть небольшой плагин Jquery с именем Defaultvalue (http://unwrongest.com/projects/defaultvalue/). У меня есть небольшой плагин JQuery под названием Placeholder (https://github.com/janjarfalk/jquery.placeholder.js). Это в основном откат для атрибута placeholder HTML5.
В обновленном обновлении я добавил эти три строки кода. Надеясь, что Defaultvalue не будет работать, если браузер имеет встроенную поддержку атрибута placeholder.
if('placeholder' in this){
// this is an input-element
return false;
}
Кажется, он работает в большинстве браузеров, кроме IE8 и IE7. По какой-то причине он находит ключ "placeholder" в этом, но нет, я думаю, никакой поддержки атрибута placeholder в 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(' '));
Что мне не хватает?
Ответы
Ответ 1
Создание нового исходного элемента ввода решило мою проблему.
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;
}
Дел > Спасибо, Роб Г-н, ты привел меня к этому.
Ответ 2
Это не так. Он равен false как в IE9, так и в IE8.
Live demo: http://jsfiddle.net/JVSgx/