ユーザーがクリックすると消える入力要素内に説明テキストを挿入したいと思います。
私はそれが非常に一般的なトリックであることを知っていますが、それを行う方法がわかりません。
最もシンプルで優れたソリューションは何ですか?
<input name="searchbox" onfocus="if (this.value=='search') this.value = ''" type="text" value="search">
より良い例は、SO検索ボタンです!これがこのコードの入手元です。ページのソースを表示することは貴重なツールです。
HTML5を使用している場合は、placeholder
属性を使用できます。
<input type="text" name="user" placeholder="Username">
私の意見では、最良の解決策には画像も入力のデフォルト値の使用も含まれません。むしろ、David Dorwardのソリューションに似ています。
簡単に実装でき、スクリーンリーダーやjavascriptを使用していないユーザーにとってはうまく機能します。
ここの2つの例を見てください: http://attardi.org/labels/
通常、フォームでは2番目の方法(labels2)を使用します。
一般的なアプローチは、デフォルト値をラベルとして使用し、フィールドがフォーカスを取得したら削除します。
アクセシビリティとユーザビリティの意味合いがあるため、このアプローチは本当に嫌いです。
代わりに、フィールドの横にある標準要素を使用することから始めます。
次に、JavaScriptがアクティブな場合、先祖要素にクラスを設定します。これにより、いくつかの新しいスタイルがそれを適用します。
次に、入力がフォーカスを失うたびに、入力に値があるかどうかをテストします。存在する場合は、祖先要素にクラス(「hide-label」など)があることを確認し、そうでない場合はそのクラスがないことを確認します。
入力がフォーカスを取得するたびに、そのクラスを設定します。
スタイルシートは、セレクターでそのクラス名を使用してラベルを非表示にします(テキストインデントを使用:-9999px;通常)。
このアプローチは、JSが無効になっているユーザーやスクリーンリーダーを使用しているユーザーなど、すべてのユーザーに適切なエクスペリエンスを提供します。
@Cory Walkerによって提案されたソリューションと@Rafaelからの拡張機能をまとめました。@ Texの魔女は私にとって少し複雑で、うまくいけば解決策を思いつきました。
javascriptとCSSを無効にした場合のエラー防止。
フォームフィールドの背景色で操作して、ラベルを表示/非表示します。
<head>
<style type="text/css">
<!--
input {position:relative;background:transparent;}
-->
</style>
<script>
function labelPosition() {
document.getElementById("name").style.position="absolute";
// label is moved behind the textfield using the script,
// so it doesnt apply when javascript disabled
}
</script>
</head>
<body onload="labelPosition()">
<form>
<label id="name">Your name</label>
<input type="text" onblur="if(this.value==''){this.style.background='transparent';}" onfocus="this.style.background='white'">
</form>
</body>
動作中のスクリプトを表示: http://mattr.co.uk/work/form_label.html
PlaceHolder.JSを使用してください。すべてのブラウザで動作し、html5に準拠していないブラウザでも非常に簡単です http://jamesallardice.github.io/Placeholders.js/
<input name="searchbox" onfocus="if (this.value=='search') this.value = ''" onblur="if (this.value=='') this.value = 'search'" type="text" value="search">
Onblurイベントも追加します。
HTMLプロパティに関する1つのヒントプレースホルダーおよびタグtextarea、<textarea>
と</textarea>
の間にスペースがないことを確認してください。 プレースホルダーは機能しません。例:
<textarea id="inputJSON" spellcheck="false" placeholder="JSON response string" style="flex: 1;"> </textarea>
間にスペースがあるため、これは機能しません...
入力を開始すると消えます。空の場合は再び表示されます。
<%= f.text_field :user_email,:value=>"",:placeholder => "Eg:[email protected]"%>
最も簡単な方法...
あなたはそのためのJavascriptコードを必要としません...
プレースホルダー属性を意味すると思います。コードは次のとおりです。
<input type="text" placeholder="Your descriptive text goes here...">
デフォルトのテキストは灰色がかった色になり、クリックすると消えます!
これを使って
スタイル:
<style type="text/css">
.defaultLabel_on { color:#0F0; }
.defaultLabel_off { color:#CCC; }
</style>
html:
javascript:
function defaultLabelClean() {
inputs = document.getElementsByTagName("input");
for (var i = 0; i < inputs.length; i++) {
if (inputs[i].value == inputs[i].getAttribute("innerLabel")) {
inputs[i].value = '';
}
}
}
function defaultLabelAttachEvents(element, label) {
element.setAttribute("innerLabel", label);
element.onfocus = function(e) {
if (this.value==label) {
this.className = 'defaultLabel_on';
this.value = '';
}
}
element.onblur = function(e) {
if (this.value=='') {
this.className = 'defaultLabel_off';
this.value = element.getAttribute("innerLabel");
}
}
if (element.value=='') {
element.className = 'defaultLabel_off';
element.value = element.getAttribute("innerLabel");
}
}
defaultLabelAttachEvents(document.getElementById('MYID'), "MYLABEL");
フォームを送信する前にdefaultLabelClean()関数を呼び出すことを忘れないでください。
よくできました
上記のようにラベルを保持し、プレースホルダーを使用しないのは良いことだと思います。ここで説明するように、UXに適しています: https://www.smashingmagazine.com/2018/03/ux-contact-forms-essentials-conversions/
入力フィールド内にラベルを付けた例:codepen.io/jdax/pen/mEBJNa