// // jQueryプラグイン formValidator // フォーム項目値検査 // $('select,input').formValidator(); // //$.fn.validator = function( arg ) { (function($) { // イベントオブジェクトを作る。イベント名と、パラメータを設定する。 new $.Event('validate'); $.fn.validator = function( arg ) { // プラグインオプション var opt = $.extend(true,{ classOK:'validate-ok', // 合格時に要素に付与されるクラス classError:'validate-error', // エラー時に要素に付与されるクラス OK:function( element ){} // 合格時に実行される関数 }, arg); // 配列に特定の値が含まれるかどうか、複数の値のうち1つでも含まれていればtrueを返す function ArrayHasAnyOne( array ){ if( Object.prototype.toString.call(array) === '[object Array]' ){ for( var i=1; i 0) { err_str = ' ' + errors[i]; continue; } err_str = errors[i]; } $(my).data('errors', err_str); if(my.hasClass('no_error')) { $(obj).addClass(opt.classOK).removeClass(opt.classError); unsetBalloon(my); } }; var unsetError = function(my) { var obj = getTarget(my); $(obj).addClass(opt.classOK).removeClass(opt.classError); $(my).data('errors', null); unsetBalloon(my); }; var validation = function(my) { var i, func; var errorTypes = []; var types = my.data('validate'); if(types == undefined || types.length == 0) { return false; } types = types.toLowerCase().split(/\s+/); // 要素タグ名別に switch( my[0].tagName.toLowerCase() ){ case 'select': // validationクラス消去 unsetError(my); // エラーチェック for( i=types.length; i--; ){ func = validators[types[i]]; if(types[i]!="require" && !require_validation(my.val())) { continue; } if(func && !func(my.val())) { errorTypes.push(types[i]); } } if(errorTypes.length > 0) { setError(my, errorTypes); } else { unsetError(my); } break; case 'input': var type = my.attr('type').toLowerCase(); switch( type ){ case 'text': // 英数全角→半角 if( ArrayHasAnyOne(types,'numeric','alpha','alphanumeric','date','mail','tel','zipcode') ){ my.val(toHalf( my.val().replace(/^\s+|\s+$/g,''))); } if( ArrayHasAnyOne(types,'upperalpha','upperalphanumeric') ){ var tmp = toHalf( my.val().replace(/^\s+|\s+$/g,'')); my.val(tmp.toUpperCase()); } // エラーチェック for( i=types.length; i--; ){ func = validators[types[i]]; if(types[i]!="require" && !require_validation(my.val())) { continue; } if(func && !func(my.val())) { errorTypes.push(types[i]); } } if(errorTypes.length > 0) { setError(my, errorTypes); } else { unsetError(my); } break; case 'radio': // ラジオボタンはグループ先頭の*ひとつだけ*にdata-validate属性をつける var convname = my.attr('name').replace(/\[/g,'\\['); convname = convname.replace(/\]/g,'\\]'); //var checked = $("input[name=" + my.attr('name') + "]:checked"); var checked = $("input[name=" + convname + "]:checked"); var error = true; if ($.inArray('require', types) >= 0) { // チェックが付いているか確認 if (checked.length > 0) { error = false; } else { errorTypes.push('require'); } } else if ($.inArray('agreement', types) >= 0) { if (checked.length > 0 && checked.hasClass('agreement_ok')) { error = false; } else { errorTypes.push('agreement'); } } if(error) { // 同じグループのradioボタンすべてについて //var $radios = $('input[type=radio][name='+ my.attr('name') +']'); var $radios = $('input[type=radio][name='+ convname +']'); // 対応する全