/** * * フォームバリデーション * 2013.09.04 T.Shinohara * ver 1.1 * * 引数 *
* data-formValidate * = 'true' : バリデーションを有効にする * * * name * : エラーメッセージのタグ名に使用 * title * : エラーメッセージの項目名 * data-validate * : trueが設定されている項目をチェック対象に * data-check : エラーチェックの内容 未設定の場合はEmptyチェック * data-eclass : エラーメッセージに追加するクラス名 * * 送信ボタン * data-submit * : trueが設定されている時フォームを送信 */ var defaults={ speed:400, clbk_flg:0 }; jQuery(function($){ $.fn.extend({ /** * バリデーションのメイン処理 */ validate:function(option){ var value = option.value; var title = option.title; var name = option.name; var check = option.getAttribute("data-check"); var eclass = option.getAttribute("data-eclass"); var error = chkError(title, value, check); if(error) dispError(option, error, name, eclass, defaults.clbk_flg); else hideError(option, name); }, /** * フォームの送信 */ formSubmit:function(){ var form = $("form[data-formValidate='true']").contents() .find("input:text[data-validate='true'], textarea[data-validate='true']"); /** メッセージ **/ var error = ''; /** エラーフラグ **/ var e_flag = 0; /** コールバック関数を指定するタイミング **/ /** 初期値を0にすると0の時に取得できないためループで使用しない数を指定 **/ var callI = form.length; /** コールバック関数のタイミングを取得 **/ for(var i = 0; i < form.length; i++){ var value = form[i].value; var title = form[i].title; var name = form[i].name; var check = form[i].getAttribute('data-check'); var eclass = form[i].getAttribute("data-eclass"); error = chkError(title, value, check); if(error){ e_flag = 1; callI = i; } } for(var i = 0; i < form.length; i++){ var value = form[i].value; var title = form[i].title; var name = form[i].name; var check = form[i].getAttribute('data-check'); var eclass = form[i].getAttribute("data-eclass"); error = chkError(title, value, check); if(error){ if(i == callI) dispError(form[i], error, name, eclass, 1); else dispError(form[i], error, name, eclass, defaults.clbk_flg); } } if(e_flag == 0) $("form[data-formValidate='true']").submit(); }, /** * フォームのリセット */ formReset:function(){ var form = $("form[data-formValidate='true']").contents() .find("input:text, textarea"); for(var i = 0; i < form.length; i++){ var type = form[i].type; var name = form[i].name; $(form[i]).val(""); hideError(form[i], name); } }, }); /** * エラータグを返す */ function setError(e_message, name, eclass){ if(eclass) var message = ''; else var message = '

'+ e_message +'

'; return message; } /** * エラーメッセージを返す */ function setErrorName(title, check){ var e_message = ''; switch(check){ case 'email': e_message = '正しい' + title + 'を入力してください'; break; case 'tel1': e_message = title + 'は数字と-で入力してください'; break; default: e_message = title + 'を入力してください'; break; } return e_message; } /** * エラータグの表示 */ function dispError(op, e_message, name, eclass, clbk_flg){ $(op).css('background-color', '#FFE4E1'); var data = $(op).next().attr("data-error"); if(!data){ $(op).after(setError(e_message, name, eclass)); }else{ if($('p[data-error="'+ 'error_' + name +'"]').text() !== e_message){ $('p[data-error="'+ 'error_' + name +'"]').text(e_message); } } if(clbk_flg == 1){ $('p[data-error="'+ 'error_' + name +'"]').show(defaults.speed, function(){ alert("必須項目をすべて入力してください"); }); }else{ $('p[data-error="'+ 'error_' + name +'"]').show(defaults.speed); } } /** * エラーチェック */ function chkError (title, value, check){ var error = ''; value = value.replace(/\s| /g,""); switch(check){ /** メールアドレス必須**/ case 'email': if(!value) error = setErrorName(title); else if(!value.match(/^[a-zA-Z0-9_\.\-]+?@[A-Za-z0-9_\.\-]+$/)) error = setErrorName(title, check); break; /** 電話番号で必須の時**/ case 'tel1': if(value){ if(!value.match(/^[0-90-9|-]+$/)){ error = setErrorName(title, check); } }else{ error = setErrorName(title); } break; /** 電話番号で必須でない時 **/ case 'tel1E': if(value){ if(!value.match(/^[0-90-9|-]+$/)){ error = setErrorName(title, 'tel1'); } } break; default: if(!value) error = setErrorName(title); break; } return error; } /** * エラータグを隠す */ function hideError(op, name){ $(op).css('background-color', ''); $('p[data-error="'+ 'error_' + name +'"]').hide(defaults.speed); } $("input:text[data-validate='true'], textarea[data-validate='true']").blur(function(){ $(this).validate(this); }); $("input:button[data-submit='true']").click(function(){ $(this).formSubmit(); }); $("input:button[data-reset='true']").click(function(){ $(this).formReset(); }); });