Проверка Javascript для поддержки встроенных заполнителей в IE8 - PullRequest
15 голосов
/ 04 апреля 2011

tldr: Почему (заполнитель в inputElemnt) равен true в IE8, несмотря на отсутствие встроенной поддержки атрибута заполнителя? Не является ли (атрибут в элементе) хорошим способом проверки нативной поддержки? Библиотека Javascript Modernizer использует его.

Long: У меня есть небольшой плагин Jquery с именем Defaultvalue (http://unwrongest.com/projects/defaultvalue/). У меня есть небольшой плагин Jquery с именем Placeholder (https://github.com/janjarfalk/jquery.placeholder.js). В основном это запасной вариант для атрибута-заполнителя HTML5.

В недавно обновленном я добавил эти три строки кода. Надеемся, что Defaultvalue не запустится, если в браузере будет встроенная поддержка атрибута placeholder.

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(' '));

Чего мне не хватает?

Ответы [ 2 ]

14 голосов
/ 04 апреля 2011

Создание нового необработанного элемента ввода решило мою проблему.

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;
}

Спасибо, РобГ, ты привел меня к этому.

1 голос
/ 04 апреля 2011

Это не так. Это равно false как в IE9, так и в IE8.

Демо: http://jsfiddle.net/JVSgx/

...