このような単純なケースでは、Modernizrを使用せずに直接物事を行うことができます。
<input type="text" placeholder="type your email address"
id="email">
<script>
var email = document.getElementById('email');
if(!('placeholder' in email)) {
email.value = email.getAttribute('placeholder');
email.onfocus = function () { this.value = ''; };
}
</script>
このアプローチでは、placeholder
属性は静的HTMLマークアップに表示されます。サポートされていなくても害はありません。実際、サポートされていない場合でも便利です。
重要なのは、placeholder
がサポートされている場合、その名前のプロパティが要素ノードに存在するということです。サポートされていない場合でも、ブラウザはそれを解析して保存しているためgetAttribute()
、プロパティで値を取得して割り当て、value
初期コンテンツとして表示することができます。
フォーカスされると、コードはフィールドをクリアします。これは、ユーザーがデータの一部を入力した後にいくつかの理由でフィールドをクリックする可能性があるため、クリックするたびにクリアするよりも適切に聞こえます。
PS使いやすさ、アクセシビリティ、および単純さのために、プレースホルダーを使用するのではなく、すべての入力フィールドに表示可能なラベルを使用することをお勧めします。したがって、これは良いユースケースではありません。ただし、同じ手法を使用することもできます。たとえば、サイト全体のナビゲーションシステムの一部としてサイトによくある非常に単純な検索フォームの場合です。そこでは、ラベルを省略して、フォームを非常に小さいサイズに絞ることが理にかなっています。