placeholder
HTML5属性の動作を少し「偽造」する小さな関数を作成しようとしています。これを行うプラグインがすでに存在することは知っていますが、jQueryを本当に上手にしたいと思っているので、自分で作成したいと思います。
これまでのところ、これは私が信じていることです。不要なものを見つけたら教えてください。
- 関数呼び出しでは、DOMで特定のフォームを検索し、CSSクラスを任意の入力フィールド/テキストエリアに追加し
input[type="submit"]
ます<button>
。 - 値がある場合、その値は、。のように、入力の/textareaのIDとともに配列またはオブジェクトに配置されます
#myInputID => initial value
。 - フォーカスすると、CSSクラスが削除され、現在の値が配列/オブジェクト内に存在するかどうかがチェックされます。値が見つかった場合は削除され、input/textareaは空になります。見つからない場合は何も起こらず、値は残ります。
- ぼかしの際、フィールドが空かどうか、または現在の値が配列/オブジェクトにあるかどうかがチェックされます。見つかった場合、または入力の/ textareaの値が空の場合、CSSクラスを再度追加するとともに、オブジェクト/配列の最初の値が再度配置されます。配列またはオブジェクトに値が見つからない場合、値は残り、CSSクラスは再追加されません。
次のようなコードでは、次のようになります。
function placeholder( element ) {
var values = [];
console.log( values );
$( element ).find( ":input" ).each( function() {
var $this = $( this );
// adding CSS class
$this.addClass( "light" );
if( $this.val() ){
// adding value to array
// the key is missing, maybe add an id to the elements?
values.push( $this.val() );
}
$this.focus( function(){
// remove CSS class
$this.removeClass( "light" );
// if value is in array
var i = $.inArray( $this.val() , values );
if( i != -1 ) {
$this.val( "" );
}
})// focus
$this.blur(function(){
// setting value to inital value if needed
// add CSS class
var i = $.inArray( $this.val() , values );
if( i == -1 ) {
$this.val( "initalValue" );
$this.addClass( "light" );
}
})// blur
}) // each
} // function
placeholder( "form" );
もちろん、まだ完成しておらず、まだいくつかの問題があります(まだ機能していません...)が、私は自分でそれを解決することはできません。これらは私の主な問題です:
- キー=>値のペアを保存するために配列またはオブジェクト(ハッシュマップ?)を使用する必要がありますか?ここSOでも、これについてさまざまな意見を見つけました。そして、どのように値を比較しますか?そのような配列/オブジェクトに値をプッシュするにはどうすればよいですか?
- ある時点で、をキャッシュすることをお勧めし
$this.val()
ます。これを行うのに最適な場所はどこですか? - コードに関する主要なパフォーマンスの問題はありますか?
- ぼかしイベントがトリガーされたときに、ユーザーが何も入力していない場合は、値を初期値にリセットする必要があります。要素を識別するためのキーが配列にないため、これは機能していません。
クイックテスト用のフィドルは次のとおりです。フィドル