アフィリエイト広告を利用しています
最新記事
日別アーカイブ

広告

posted by fanblog

2012年10月10日

placeholder 実装(その1)

今回は HTML5 で実装されている、placeholder の実装を非対応ブラウザで実現してみましょう。

HTML5 に対応していないモダンブラウザと言えば、ひとつしかありません。
それに Firefox 3.6 まだ配布しているでしょうか?こちらも検証してみたいと思います。

まず placeholder のサポート判定ですが、以下の記述を使いましょう。

if(document.createElement('input').placeholder !== undefined) {
 return;
}

比較的簡単に実装する場合、テキストボックスの未入力時に、灰色で文字を表示する、
また、フォーカスがあたると非表示にする対応が考えられます。

この実装方法は、該当項目が必須であれば問題ありません。
必須でないときは、灰色で表示されている文字列で次の画面に送られてしまいます。

回避策としては、テキストボックスの上に、文字列表示用の span を重ねてあげれば良さそうです。
フォーカス時には span を非表示に、フォーカス解除時はテキストボックスが空かどうかで
表示可否が決まります。

静的配置の上にspan を重ねる方法について、Firefox の実装方法は簡単です。
span を作成し、親要素の offsetLeft, offsetTop を style.left, style.top にあててやれば OK です。

span.style.left = txt.offsetLeft + 'px';
span.style.top = txt.offsetTop + 'px';


IE はひとクセあります。offsetLeft と offsetTop は親要素からの位置になっています。
親要素は offsetParent で取得でき、親要素をたどって、style.position が relative または absolute になっていない要素までの offsetLeft, offsetTop を加算していきます。

var left = 0;
var top = 0;
var elm = txt;
while (elm) {
 if (elm.currentStyle.position != 'relative' && elm.currentStyle.position != 'absolute') {
  left += elm.offsetLeft;
  top += elm.offsetTop;
 } else {
  break;
 }
 elm = elm.offsetParent;
}
span.style.left = left + 'px';
span.style.top = top + 'px';

今回はここまでです。


{a8.net http://books.livedoor.com/item/3481813}
【このカテゴリーの最新記事】
posted by FJT at 01:54| javascript
プロフィール
FJTさんの画像
FJT
使えそうな技術情報を掲載しています。 ぜひ、役立ててください。
プロフィール
リンク集
×

この広告は30日以上新しい記事の更新がないブログに表示されております。