Проблемы обнаружения функций HTML5-заполнителей - PullRequest
11 голосов
/ 23 ноября 2011

Мне нужно проверить поддержку заполнителя.Следующее прекрасно работает во всех современных браузерах, а также 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 ]

15 голосов
/ 23 ноября 2011

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

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

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

5 голосов
/ 23 ноября 2011

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

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

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

3 голосов
/ 23 ноября 2011

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

Object.prototype.hasOwnProperty.call(i, "placeholder");
...