Powertip
Powertipを使って、フォームの入力補助テキストを表示する。
とても便利だったので、簡単にメモ。
1.下のようなHTMLフォームを用意する。
<form> <label>Name</label> <input type="text" name="name" class="name" id="field_01"> <label>Email</label> <input type="text" name="email" class="email" id="field_02"> <label>Comment</label> <textarea></textarea> <input type="submit" value="submit"> </form>
2.powertipライブラリのjs, css ファイルを読みこませる。
ダウンロード ↓
http://stevenbenner.github.io/jquery-powertip/
<script type="text/javascript" src="assets/js/powertip/core.js"></script> <script type="text/javascript" src="assets/js/powertip/csscoordinates.js"></script> <script type="text/javascript" src="assets/js/powertip/displaycontroller.js"></script> <script type="text/javascript" src="assets/js/powertip/placementcalculator.js"></script> <script type="text/javascript" src="assets/js/powertip/tooltipcontroller.js"></script> <script type="text/javascript" src="assets/js/powertip/utility.js"></script> <script type="text/javascript" src="assets/js/powertip/powertip.js"></script> <link rel="stylesheet" href="assets/css/powertip/jquery.powertip.css" >
3.新たにcontact.js等でファイルを作成し、powertip表示スクリプトを記述していく。
仕様は、テキストを、focus, keydown&keyup&keypress&change, blurのトリガーで表示させたい。
その都度バリデーションを行ない、フォーカスした時・入力テキストがValidの時・入力テキストがValidでないときそれぞれのテキストを定義する。
/* when focus */
defaultText = {};
defaultText["name"] = "お名前を入力して下さい";
defaultText["email"] = "お名前を入力して下さい";
/* when it is not valid */
errorText = {};
errorText["name"] = "全角で入力して下さい";
errorText["email"] = "メールアドレスの形式をご確認下さい";
/* when it is valid */
successText = {};
successText["name"] = "正しい形式です";
successText["email"] = "正しい形式です";
次に、バリデーションのための関数も定義。
/* filters */
// name
var filter_name = /^[ぁ-ン]+$/;
// email
var filter_email = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
function chkField($this){
var val = $this.val(),
result = "";
if($this.hasClass("name")){
if( !filter_name.test(val)){
result = 0;
}else{
result = 1;
}
}else if($this.hasClass("email")){
if( !filter_email.test(val)){
result = 0;
}else{
result = 1;
}
}
return result;
}
そして、tooltip表示の関数を定義する。
function mytooltip(){
/* set powerTip as manual */
$("input").powerTip({ manual:true });
$("input").each(function(){
// define field id
var fieldId = $(this).attr("id");
/* focus */
$("#" + fieldId).on("focus", function(){
var val = $(this).val();
// get tooltip text
var fieldName = $(this).attr("name");
var tooltipText = defaultText[fieldName];
// set tooltip text
$(this).data('powertip', tooltipText);
// show tooltip
$.powerTip.show(this);
});
/* keydown, keyup, keypress, change */
$("#" + fieldId).on("keydown keyup keypress change", function(){
// get tooltip text
var fieldName = $(this).attr("name");
// get field value
var val = $(this).val();
// validate value
if(chkField($(this)) == 1){
//valid
var tooltipText = successText[fieldName];
}else{
var tooltipText = errorText[fieldName];
}
// change tooltip text
$("#powerTip").text(tooltipText);
});
/* blur */
$("#" + fieldId).on("blur", function(){
$.powerTip.hide();
});
});
}