HTML5占位符功能检测问题

时间:2011-11-23 15:49:14

标签: javascript html5 placeholder jslint browser-feature-detection

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

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

它有效,但JSLint抱怨使用in

  

意外'in'。与undefined比较,或使用hasOwnProperty   方法改为。

很好,所以我会重构它:

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

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

  

Object不支持属性或方法'hasOwnProperty'

知道如何让JSLint感到高兴,还有IE7和IE8?

3 个答案:

答案 0 :(得分:15)

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

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

这应该可以跨浏览器正常运行。

答案 1 :(得分:5)

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

  

JSHint是JSLint的一个分支,由Douglas编写和维护   克罗克福德。

     

该项目最初是为了努力创造更多   JSLint的可配置版本 - 不强制执行的版本   其用户的特定编码风格 - 但后来转化为   将静态分析工具与自己的目标和理想分开。

答案 2 :(得分:3)

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

i