HTML5占位符功能检测问题

kar*_*m79 11 javascript html5 jslint placeholder browser-feature-detection

我需要测试占位符支持.以下适用于所有现代浏览器,以及IE7,IE8,IE9:

$.support.placeholder = (function () {
    var i = document.createElement("input");
    return "placeholder" in i;
}());
Run Code Online (Sandbox Code Playgroud)

它有效,但JSLint抱怨使用in:

出乎意料的'在'.与undefined比较,或使用hasOwnProperty方法.

很好,所以我会重构它:

$.support.placeholder = (function () {
    var i = document.createElement("input");
    return i.hasOwnProperty("placeholder");
}());
Run Code Online (Sandbox Code Playgroud)

现在这传递JSLint没有任何错误或警告,但它在IE7和IE8与这个旧板栗打破:

对象不支持属性或方法'hasOwnProperty'

任何想法如何使JSLint快乐,以及IE7和IE8?

Daf*_*aff 15

您还可以使用JSLint建议的其他解决方案:

return typeof i.placeholder !== 'undefined';
Run Code Online (Sandbox Code Playgroud)

这应该跨浏览器没有问题.

  • 实际上JSLint希望你使用`return i.placeholder!== undefined;`并且如果你尝试使用`typeof i.placeholder!=='undefined';`它就会这样说. (2认同)

Ale*_*pin 5

我的答案是不会.不要让JSLint高兴.JSLint是Crockford应该如何看待JavaScript的.这是他的个人标准.如果你想要一些JavaScript的lint,请使用JSHint.它是JSLint的分叉版本,完全可配置且没有疯狂的要求.从它的主页:

JSHint是JSLint的一个分支,由Douglas Crockford编写和维护.

该项目最初的目的是为了制作一个更可配置的JSLint版本 - 一个不对其用户强制执行某种特定编码风格的版本 - 然后转换为一个具有自己的目标和理想的独立静态分析工具.