Проблемы с обнаружением 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");