11

我需要测试占位符支持。以下适用于所有现代浏览器以及 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 开心吗?

4

3 回答 3

15

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

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

这应该可以跨浏览器正常工作。

于 2011-11-23T15:55:54.297 回答
5

我的回答是不要。不要让 JSLint 高兴。JSLint 是 Crockford 认为 JavaScript 应该完成的方式。这是他个人的标准。如果您想要某种 JavaScript lint,请使用JSHint。它是 JSLint 的一个分支版本,完全可配置且没有疯狂的要求。从它的主页:

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

该项目最初是为了制作一个更可配置的 JSLint 版本——它不会对用户强制执行一种特定的编码风格——但后来转变为一个具有自己目标和理想的单独的静态分析工具。

于 2011-11-23T15:54:16.813 回答
3

您可以通过 获取函数Object.prototype,然后call在元素上获取函数。这使得该函数可用并且您能够以i.hasOwnProperty时尚方式调用它(即this调用它时的幕后值是i):

Object.prototype.hasOwnProperty.call(i, "placeholder");
于 2011-11-23T15:54:07.510 回答