私のサイトに対する偏執的な態度のため、また専門的な配慮から、firefox + noscriptを使用しています。 私が最初にいくつかのサイトに行くとき、私はjsをオフにしてフィールドをクリックして、「search here」という碑文が誇示する場所を検索します。 プレースホルダー属性を問題なくサポートする最新のブラウザーを持っているという事実にもかかわらず。 原則として、どこにでもこのような恐怖があります:<input value = "Search the site" onfocus = "if(this.value == 'Search the site')this.value == ''" onblur = "if(this.value = = '')this.value == 'サイトを検索' ">(90年代後半のエコー)。
この世界の進歩により、この問題は<input>の限界を超えましたが、この本質は変わりません。 さらに高度な、値から値を削除し、タイトルに配置-それは良いでしょう。 幸いなことに、標準を作成する人たちはこのビジネスを見て、この目的のために特別なプレースホルダー属性をタグに装備することにしました。 ブラウザ開発者はすぐにこの機能を実装しましたが、その後IEは再び道を歩みました。 世界には6恐竜恐竜がインストールされているコンピューターがたくさんあることを思い出す価値はないと思います。7はもちろん、8ほどです。また、MSIEのメンバーはこの属性を贅沢すぎると考えており、9日には含まれていませんバージョン。 これらの誤解をすべて回避し、ページレイアウトを簡単にするために、小さなスクリプトを作成しました。 後で見ることができるように、これはjqueryに基づいていますが、別のフレームワークでリメイクするための簡単な操作の助けにはなりません。
(function($) { $(function() {
アクティブなプレースホルダーを持つ関数がプレースホルダークラスを追加することに気づかなかったかもしれません。プレースホルダークラスは、-webkit-input-placeholder、input ::-webkit-input-placeholder、input:-moz-placeholderと組み合わせて使用できます。
PS:私はこのソリューションに固有のふりをすることは決してありません。これはボイラープレートシリーズのレイアウトに使用するコードの一部にすぎません。
UPD:ここで離婚したすべてのハリバラのうち、唯一の本当の注意は
rwzから
でした 。その値はこのように正しく再定義されていません。 このステートメントは、上記のメソッドの普遍性を否定します。 そのため、これらの欠点のない別のソリューションを作成することにしました。
(function($) { $(function() { var placeholder_support = !!('placeholder' in document.createElement( 'input' )); if (!placeholder_support) { var body = $(document.body); $('input[placeholder]').each(function(){ var tpl = '<div class="placeholder" style="position:absolute;overflow:hidden;white-space:nowrap"/>', th = $(this), position = th.offset(), height = th.height(), width = th.width(), placeholder = $(tpl).appendTo(body) .css({ top: position.top, left: position.left, width: width, height: height, padding: ((th.innerHeight(true) - height) / 2) + 'px ' + ((th.innerWidth(true) - width) / 2) + 'px ' }) .text(th.attr('placeholder')) .addClass(th.attr('class')) ; placeholder.bind('click focus', function(){placeholder.hide();th.focus();}); th.bind('blur', function(){if (th.val() == '') placeholder.show()}); }); } }); }(jQuery));
この方法を使用する際の考慮事項:
- .placeholderクラスには、入力と同じサイズと行の高さを割り当てる必要があります。 すべての入力クラスがプレースホルダーdivにコピーされます
- inpuがposition:のコンテナにある場合、スクロールするときの位置が正しくありません。 必要に応じて、簡単に修正します。
- まあ、それに応じて速度。 許容できるものの、ページ全体に散らばる100個の入力で、firefoxは177ミリ秒を示しました(テストでは、属性はdata-placeholderに変更されました)。
- 縮小されたコードは597バイトかかります-必要に応じて削減できます
他の短所や短所があるかもしれませんが、私は喜んであなたのコメントを読み、適切な変更を加えます。
PPS:この記事は、jsが有効になっているかどうかについてではありません。 これは、特にMSIEの松葉杖であり、他のブラウザの場合もあります。