Javascript HTML5占位符功能检测难题
我需要测试占位符支持。以下内容适用于所有现代浏览器以及IE7、IE8、IE9:Javascript HTML5占位符功能检测难题,javascript,html,placeholder,jslint,browser-feature-detection,Javascript,Html,Placeholder,Jslint,Browser Feature Detection,我需要测试占位符支持。以下内容适用于所有现代浏览器以及IE7、IE8、IE9: $.support.placeholder = (function () { var i = document.createElement("input"); return "placeholder" in i; }()); 它可以工作,但JSLint抱怨在中使用了: 意外的“入”。与未定义的进行比较,或使用hasOwnProperty 方法 好的,我将把它重构为: $.support.placeh
$.support.placeholder = (function () {
var i = document.createElement("input");
return "placeholder" in i;
}());
它可以工作,但JSLint抱怨在中使用了:
意外的“入”。与未定义的进行比较,或使用hasOwnProperty
方法
好的,我将把它重构为:
$.support.placeholder = (function () {
var i = document.createElement("input");
return i.hasOwnProperty("placeholder");
}());
现在,它通过JSLint时没有任何错误或警告,但它在IE7和IE8中使用了以下旧代码:
对象不支持属性或方法“hasOwnProperty”
你知道如何让JSLint以及IE7和IE8开心吗?你可以通过Object.prototype
获取函数,然后在元素上调用它。这使得函数可用,并且您能够以i.hasOwnProperty
的方式调用它(即调用它时i
的This
值在幕后):
我的答案是不要。别让杰斯林特高兴。JSLint是Crockford查看JavaScript的方式。这是他的个人标准。如果希望JavaScript使用某种lint,请使用。它是JSLint的分叉版本,完全可配置,没有疯狂的需求。从其主页:
JSHint是由Douglas编写和维护的工具JSLint的分支
克罗克福德
该项目最初的目的是为了取得更大的成功
JSLint的可配置版本—不强制执行JSLint的版本
用户的特定编码风格,但随后转换为
单独的静态分析工具有自己的目标和理想
您还可以使用JSLint建议的其他解决方案:
return typeof i.placeholder !== 'undefined';
这应该可以跨浏览器正常工作。这也可以正常工作,而且非常简洁,如果我费心阅读错误消息,我应该会发现:)实际上JSLint希望您使用return I.placeholder!==未定义如果您尝试使用i.placeholder的typeofi.placeholder!='未定义'
.Hmm,您会选择哪一个。@karim79:这一个允许将属性设置为未定义
,但另一方面会引入函数调用开销。同意,但不幸的是,这不是我的决定。我必须接受它,至少目前是这样+总之,只要你知道自己在做什么,让jslint这样的工具开心并不一定意味着让你的代码变得更好。如果你的老板想要,给他们一些好的例子来证明他们的愚蠢。我不知道为什么jslint在
中反对。它已经存在了一段时间,所以应该有充分的支持,而且它非常直观。对于占位符支持,这是实心的:
return typeof i.placeholder !== 'undefined';