Подтвердить что ты не робот

Проверка 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(' '));

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

4b9b3361

Ответ 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;
}
Дел >

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