Movable Type 備忘録
Highlight active input
- Prev Page: 携帯からTwitter
- Next Page: 画像の使用を極力控えてカックいいCSSデザインやてみよ大会
眠いでオジャる(つω-`。)
今日も朝早くから出かけて「ハンニバル・ライジング」観てきました。
今作品はレクター博士の少年・青年時代のストーリー。
レクター博士らしき残忍さはなかったけど、わたし的にはおもしろかったです。
さて、先ほど友人からメルが届きました。
いつもなら携帯にダイレクト・コールなのに、なぜか今回はメル…(。-ω-)
わたしのサイトのメールフォームでは、各入力項目にフォーカスがあたるとハイライト表示するようにしています。
そのやり方を教えて欲しいとのことでした。
今回に限ってなぜメルだったのか…それは、わたしのメールフォームのテストも兼ねて…だそうです。
易しい友人を持って幸せ!? なbzbellです (; ̄∇ ̄A
まずはサンプルですね。
わたしのサイトのメールフォームの各入力項目で確認してください。
メールフォーム
フォーカスイベント/ブラーイベント
フォームの各入力項目にフォーカスされた場合(フォーカスイベント)強調表示を、フォーカスを失った場合(ブラーイベント)強調表示解除の方法について説明します。
入力項目(<input>、<textarea>)にはonfocusイベント、onblurイベントというものがあります。
それぞれフォーカス IN、フォーカス OUTを意味します。
<input>、<textarea>で個々に指定すると、以下のようになります。
上記は以下のようなタグになります。
<fieldset><script type="text/javascript">function ev_onfocus(obj) {if (obj.style) obj.style.backgroundColor='#5365c1';}function ev_onblur(obj) {if (obj.style) obj.style.backgroundColor='#f4f6fb';}</script><label for="focus_test">Please Focus IN/OUT: </label><input id="focus_test" type="text" size="30" name="focus_test"onfocus="ev_onfocus(this)"onblur="ev_onblur(this)"style="background-color: #f4f6fb;" /></fieldset>
このように個々に指定してもいいのですが、わたし的にはかなり面倒です (; ̄∇ ̄A
そこでJavaScript & CSSを使ってカンタンにやってみます。
カスタマイズ
今回使用するJavaScriptはDHTMLgoodies.comさんとこで配布されてるhighlight-active-input.jsを使用しました。
まずJavaScriptをダウンロードします。
上記URLからhighlight-active-input.zipという圧縮ファイルをダウンロードして、適当なフォルダに展開します。そして、サーバにアップロードします。アップロード先はどこでも構いませんので、各自の環境に合わせてアップロードしてください。
次にテンプレートを変更します。
以下のコードを<head>~</head>の間に追加します。JavaScript定義
<script type="text/javascript" src="<$MTBlogURL$>js/highlight-active-input.js"></script>
青い字の部分を各自の環境に合わせて変更します。
そして、</body>タグの直上あたりに以下のコードを追加します。JavaScript実行
<script type="text/javascript"><!--initInputHighlightScript();//--></script>
最後にCSSを変更します。
具体的にはハイライト時のスタイルを定義してあげるだけです。スタイル定義
.inputHighlighted {background-color: #5365c1 !important;color: #d3d9f0;}
highlight-active-input.jsによってハイライトされると青い字のクラス名が付加されます。
そのときのスタイルを各自のお好みで定義してください ( ̄∇ ̄)/
以上で完了です。
後は再構築して、表示確認を行ってください。
注意点
わたしのサイトのメールフォームでは、フォーカスイベント、ブラーイベントを使うJavaScriptが、困ったことに2人います(つω-`。)
こちらのForm field hints with CSS and JavaScriptと競合してしまいます。
そのようなケースの場合、思った動作しませんのでご注意ください。
ですので、わたしの場合はForm field hints with CSS and JavaScript側のJavaScriptをカスタマイズして使用しています。
具体的には以下のようにカスタマイズしました。
formhint.js
var currentlyActiveInputClassName = false;function addLoadEvent(func) {var oldonload = window.onload;if (typeof window.onload != 'function') {window.onload = func;} else {window.onload = function() {oldonload();func();}}}function prepareInputsForHints() {var inputs = document.getElementsByTagName("input");for (var i=0; i<inputs.length; i++){// test to see if the hint span exists firstif (inputs[i].parentNode.getElementsByTagName("span")[0]) {// the span exists! on focus, show the hintinputs[i].onfocus = function () {this.parentNode.getElementsByTagName("span")[0].style.display = "inline";// ハイライト表示追加 by bzbellcurrentlyActiveInputClassName = this.className;this.className = 'inputHighlighted';}// when the cursor moves away from the field, hide the hintinputs[i].onblur = function () {this.parentNode.getElementsByTagName("span")[0].style.display = "none";// ハイライトを元に戻す by bzbellthis.className = currentlyActiveInputClassName;}}}// repeat the same tests as above for selectsvar selects = document.getElementsByTagName("select");for (var k=0; k<selects.length; k++){if (selects[k].parentNode.getElementsByTagName("span")[0]) {selects[k].onfocus = function () {this.parentNode.getElementsByTagName("span")[0].style.display = "inline";// ハイライト表示追加 by bzbellcurrentlyActiveInputClassName = this.className;this.className = 'inputHighlighted';}selects[k].onblur = function () {this.parentNode.getElementsByTagName("span")[0].style.display = "none";// ハイライトを元に戻す by bzbellthis.className = currentlyActiveInputClassName;}}}var textareas = document.getElementsByTagName("textarea");for (var i=0; i<textareas.length; i++){// test to see if the hint span exists firstif (textareas[i].parentNode.getElementsByTagName("span")[0]) {// the span exists! on focus, show the hinttextareas[i].onfocus = function () {this.parentNode.getElementsByTagName("span")[0].style.display = "inline";// ハイライト表示追加 by bzbellcurrentlyActiveInputClassName = this.className;this.className = 'inputHighlighted';}// when the cursor moves away from the field, hide the hinttextareas[i].onblur = function () {this.parentNode.getElementsByTagName("span")[0].style.display = "none";// ハイライトを元に戻す by bzbellthis.className = currentlyActiveInputClassName;}}}}
青い字の部分を追加することで、フォーカスイベント、ブラーイベントの競合を回避しました (●>∀<●)
Trackback Pings(0)
No trackbacks found.
Comments(0)
No comments found.




Post a Comment