Проблемы с обнаружением HTML5-заполнителей

Мне нужно проверить поддержку заполнителя. Следующее прекрасно работает во всех современных браузерах, а также IE7, IE8, IE9:

$.support.placeholder = (function () {
    var i = document.createElement("input");
    return "placeholder" in i;
}());

Это работает, но JSLint жалуется на использование in:

Неожиданное "в". Сравните с undefined или используйте метод hasOwnProperty.

Хорошо, так что я сделаю это следующим образом:

$.support.placeholder = (function () {
    var i = document.createElement("input");
    return i.hasOwnProperty("placeholder");
}());

Теперь это проходит JSLint без каких-либо ошибок или предупреждений, но он ломается в IE7 и IE8 с этим старым каштаном:

Объект не поддерживает свойство или метод hasOwnProperty

Любая идея, как сделать JSLint счастливым, а также IE7 и IE8?

3 ответа

Решение

Вы также можете использовать другое решение, которое предлагает JSLint:

return typeof i.placeholder !== 'undefined';

Это должно работать кросс-браузер без проблем.

Мой ответ будет не. Не делай JSLint счастливым. JSLint - это то, как Крокфорд считает, что JavaScript должен быть сделан. Это его личный стандарт. Если вы хотите что-то вроде ворса для JavaScript, используйте JSHint. Это раздвоенная версия JSLint, которая полностью настраивается и не требует безумных требований. С его домашней страницы:

JSHint - это форк JSLint, инструмента, написанного и поддерживаемого Дугласом Крокфордом.

Первоначально проект был начат как попытка создать более настраиваемую версию JSLint - ту, которая не навязывает своим пользователям один определенный стиль кодирования, - но затем превратилась в отдельный инструмент статического анализа со своими собственными целями и идеалами.

Вы можете получить функцию через Object.prototype, затем call это на элементе. Это делает функцию доступной, и вы можете вызывать ее в i.hasOwnPropertyспособ (то есть this значение за кадром при вызове это i):

Object.prototype.hasOwnProperty.call(i, "placeholder");
Другие вопросы по тегам