Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript HTML5占位符功能检测难题_Javascript_Html_Placeholder_Jslint_Browser Feature Detection - Fatal编程技术网

Javascript HTML5占位符功能检测难题

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

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

$.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!==未定义typeofi.placeholder!='未定义'
.Hmm,您会选择哪一个。@karim79:这一个允许将属性设置为
未定义
,但另一方面会引入函数调用开销。同意,但不幸的是,这不是我的决定。我必须接受它,至少目前是这样+总之,只要你知道自己在做什么,让jslint这样的工具开心并不一定意味着让你的代码变得更好。如果你的老板想要,给他们一些好的例子来证明他们的愚蠢。我不知道为什么jslint在
中反对
。它已经存在了一段时间,所以应该有充分的支持,而且它非常直观。对于占位符支持,这是实心的:
return typeof i.placeholder !== 'undefined';