1 2 3 4 5 6 7 | < input class = "guideText guide" size = "30" value = "お名前を入力してください" type = "text" > < textarea class = "guideText guide" cols = "30" rows = "8" >メッセージを入力してください</ textarea > < input value = "送信" type = "submit" > </ form > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | *{ font-family : sans-serif ; } body{ padding : 30px ; } form{ padding : 0 0 10px ; } form div{ padding : 0 0 3px ; } .guide{ color : #cccccc ; } textarea{ display : block ; width : 300px ; margin : 5px 0 5px ; }
|
1 2 3 4 5 6 7 8 | //変更ポイント1 コード内で使用するクラス名を変数化 var guideClass = 'guide' ; //変更ポイント2メソッドチェーン使用 element.val( '' ).removeClass(guideClass); element.val(guideText).addClass(guideClass);
element.addClass(guideClass); |
以前作成した下記の送信フォームに今回学習したガイドテキスト機能を実装してください。
//ガイドテキスト //起点のオブジェクトの変数化 var parts = $('#quest03 dd input,#quest03 dd textarea'); //ボタンの非表示 btn_send.hide(); //オブジェクトへのeachを利用した操作 parts.each(function(){ //初期設定 //テキストボックスの初期値 var guideText = this.defaultValue; //テキストボックスの現在の値 var valeu = $(this).val(); //thisオブジェクト var input = $(this); //リロード対応(更新操作でも初期設定に戻る) jQuery(window).load( function () { input.val(guideText).addClass('guide'); }); //focus&bluer イベント時 input.focus(function(){ //フォーカス時の条件分岐 if(input.val()===guideText){ input.val(''); input.removeClass('guide'); } }).blur(function(){ //blur時の条件分岐 if(input.val()===""){ //未入力の場合 input.val(guideText) .addClass('guide'); btn_show($('#quest03 dd input')); }else{ //入力をされた場合 //ブラーされた要素の値の取得 var val = $(this).val(); //ブラーされた要素のname属性値取得 var name = $(this).attr('name'); //ヴァリデート関数その1 //ヴァリデーションが通った場合は、retにtrueが格納 var ret =valid(val,name); //ヴァリデート関数その2(失敗) //var ret = valided(val); //メッセージ表示領域の変数化 var dd = $(this).parent('dd'); //ヴァリデート関数が通ったとき if(ret){ input.val(guideText).addClass('guide'); //警告メッセージ生成 var p = $('<p class="del" />'); p.text(guideText).appendTo(dd); //メッセージがすでにある場合、メッセージが2つ以上表示されないよう1つ↑のの同一要素を削除 $('p').prev('.del').remove(); }else{ //メッセージがあった場合は消す。 dd.find('p').remove(); //ボタン表示関数 btn_show($('#quest03 dd input')); } } }); //guideクラスの追加 if(valeu === guideText){ input.addClass('guide'); } //ボタン表示関数 function btn_show(jQob){ //カウンタ関数設定 var i=0; //引数で渡されたjQオブジェクトへのeachでの操作 jQob.each(function(){ //未入力だった場合のみカウンタ変数をインクリメント if($(this).val()===this.defaultValue) i++; }); //console.log(i); //カウンタ変数が0の時(ヴァリデーションが通りかつ未入力の場合) if(i === 0){ //ボタンの表示 btn_send.show(); }else{ btn_send.hide(); } return; }; //ヴァリデーション関数その1 function valid(str,name){ //かな文字入力エリア用条件分岐 if(name === 'name1' || name === 'name2'){ if(!str.match(/^[^ -~。-゚]*$/)){ btn_send.hide(); return '全角にて記入してください'; } } //メイル形式入力エリア用条件分岐 if(name === 'mail'){ if(!str.match(/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/)){ btn_send.hide(); return 'メールアドレスを正しく記入してください。'; } } //ヴァリデーションが通らなかった場合はfalseを返す。 return false; } }); //ヴァリデーション関数その2(失敗) function valided(str){ // if(!str.match(/^[^ -~。-゚]*$/) || !str.match(/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/)){ if(str.match(/^[^ -~。-゚]*$/)){ //var ret = ['全角にて記入してください',1]; return false; }else if(str.match(/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/)){ // var ret = ['メールアドレスを正しく記入してください。',2]; return false; } return true; //} }