11

プレースホルダーのサポートをテストする必要があります。以下は、IE7、IE8、IE9だけでなく、すべての最新のブラウザーでうまく機能します。

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

inそれは動作しますが、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に何らかのリントが必要な場合は、JSHintを使用してください。これは、完全に構成可能で、クレイジーな要件がないJSLintのフォークバージョンです。ホームページから:

JSHintは、DouglasCrockfordによって作成および保守されているツールであるJSLintのフォークです。

このプロジェクトは当初、JSLintのより構成可能なバージョン(ユーザーに特定のコーディングスタイルを適用しないバージョン)を作成する取り組みとして開始されましたが、その後、独自の目標と理想を備えた別個の静的分析ツールに変換されました。

于 2011-11-23T15:54:16.813 に答える
3

関数をフェッチしてから、要素でフェッチできObject.prototypeますcall。これにより、関数が使用可能になりi.hasOwnProperty、 -fashionの方法で呼び出すことができます(つまり、this呼び出すときの舞台裏の値i):

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