フォームチェック作成 (メモ)

jsファイル

------------------

$(function(){

const MSG_TEXT_MAX = '20文字以内で入力して下さい。';

const MSG_EMPITY ='入力必須です。';

const MSG_EMAIL_TYPE = 'emailの形式ではありません。';

const MSG_TEXTAREA_MAX ='100文字以内で入力してください。';

}

 

$(".valid-text").keyup(function(){

 

var form_g = $(this).closest('.form-group');

 

if($(this).val().length > 20){

form_g.removeClass('has-success').addClass('has-error');

form_g.find('.help-block').text(MSG_TEXT_MAX);

}else{

form_g.removeClass('has-error').addClass('has-success');

form_g.find('.help-block').text('');

}

});

 

$(".valid-email").keyup(function(){

 

var form_g = $(this).closest('form-group');

 

if($(this).val().length === 0 ){

form_g.removeClass('has-success').addClass('has-error');

form_g.find('.help-block').text(MSG_EMPTY);

}else if($(this).val().length > 50 || !$(this).val().match(/^([a-zA-Z0-9]))+([a-zA-Z0-9\._-])*@([a-zA-Z0-9\._-]+)+$/)){

form_g.removeClass('has-sucess').addClass('has-error');

form_g.find('help-block').text(MSG_EMAIL_TYPE);

}else{

form_g.removeClass("has-error").addClass('has-success');

form_g.find('.help-block').text('');

}

});

------------------

 解説

・入力フォームの内容をチェックするにはjQueryを使って「バリデーション機能」を作る

・バリデーションを行うには、各フォームに対して「キーが入力されたら〜」というイベントをセットしてあげる

・イベントが発生した時には、if文を使って入力文字数などのチェックしてエラーの場合にはエラーメッセージを表示させる

 

------------------定数ボックス------------------

$(function(){

const MSG_TEXT_MAX = '20文字以内で入力してください。';

const MSG_EMPITY ='入力必須です。';

const MSG_EMAIL_TYPE ='emailの形式ではありません。';

const MSG_TEXTAREA_MAX ='100文字以内で入力してください。';

ーーーーーーー

定数⇨値を入れる箱(一回書いたら中身を書き換えられない)

書き方)const 〜(基本は大文字)

・エラーメッセージとして表示させる定数 

 

------------------イベント1:名前入力フォーム-----------------

$(".valid-text").keyup(function(){

var form_g = $(this).closest('.form-group');

if($(this).val().length > 20 ){

form_g.removeClass("has-success").addClass('has-error');

form_g.find('.help-block').text(MSG_TSXT_MAX);

}else{

form_g.removeClass('has-error').addClass('has-success');

form_g.find('.help-block').text('');

ーーーーーーー

クラス属性が「valid-text」のものにキーアップイベントを指定⇨function以下の処理が実行

・(this) ⇨ 名前入力フォーム(".valid-text"を指す)

・.closest⇨自分以上の親の要素且つ()の中で指定したものを取得

(今回の場合、名前フォームから見て親要素(form-group))

 

・length > 20 ){ ⇨文字数20文字を超えた場合

 

・form_g.removeClass('has-success').addClass('has-error');

⇨ そのノード(要素)に付いてるclass属性「has-success」を削除し、class属性「has-error」を追加

 

・form_g.find('.help-block').text(MSG_TEXT_MAX);

 ⇨ class属性「help-block」を探し、そのタグの中のテキストを「MSG_TEXT_MAX」へ書き換える

 

※find ⇨ 子以下の要素の中で()のものを探す意味合い(この場合"helpーblock")

 

・}else{ ⇨20文字以内の場合

 

・form_g.removeClass('has-error').addClass('has-success');

⇨ノードに対して付いているクラス属性を削除

 

・form_g.find('.help-block').text('');

⇨class属性help-blockを探して「空」にする

 

【まとめ】

名前入力フォームにキーがある度に、入力された文字数が20文字以上かどうかを判定し、

<20文字以上の場合>

class属性「form-group」にclass属性「has-error」を追加し、

class属性「help-block」がついた要素の中にエラーメッセージを表示させる。

<20文字以内の場合>

「form-group」の「has-error」を削除し、「has-success」を追加し、何も表示させない。

------------------イベント2:emailフォーム-----------------

$(".valid-email").keyup(function(){

 

var form_g = $(this).closest('.form-group');

 

if($(this).val().length === 0 ){

form_g.removeClass('has-success').addClass('has-error');

form_g.find('.help-block').text(MSG_EMPTY);

}else if($(this).val().length > 50 || !$(this).val().match(/^([a-zA-Z0-9]))+([a-zA-Z0-9\._-])*@([a-zA-Z0-9\._-]+)+$/) ){

form_g.removeClass('has-success').addClass('has-error');

form_g.find('help-block').text(MSG_EMAIL_TYPE);

 

}else{

form_g.removeClass('has-error').addClass('has-success');

form_g.find('.help-block').text('');

}

});

ーーーーーーー

!$(this).val().match(/^([a-zA-Z0-9]))+([a-zA-Z0-9\._-])*@([a-zA-Z0-9\._-]+)+$/) )

⇨『正規表現

 

正規表現

文字列のルールを決めて、そのルールに当てはまるかをチェックする書き方(ルールの書き方)

(この場合はEメール形式かどうか確認している)

jQueryの場合、「.match」を使う

(例)$('p').val().match(/^(/^AAA/)

・文字列の先頭がAAAで始まってるかどうかを確認

 ⇨正しいか否かをチェックできる

 

※「正規表現 email」「正規表現 TEL」などで調べて使うようにする

 

・入力文字数が50文字を超えた場合、またはEメール形式ではない場合、{ }の処理を実行

 

cssファイル

------------------

/*バリデーション*/

.help-block{

font-size: 14px;

margin-left: 10px;

}

/*エラー時*/

.has-error input,has-error textarea{

border: 1px solid #ff4ddb;

}

.has-error .help-block,.has-error label{

color: #ff4d4b;

}

/*サクセス時*/

.has-success input,.has-success textarea{

border: 1px solid #2fb4ce;

}

.has-success .help-block,.has-success label{

color: #2fb4ce;

}

 

・クラス名「has-error」がついた段階でCSSで指定されているものに内容が変わる。

⇨文字色が赤くなり、枠線も赤くなる

・20文字以上の場合、「has-error」というクラス名がつく

 ・20文字以内の場合、クラス名「has-success」がつき、文字色と枠線が青くなる

 

【まとめ】

jQuery:判定内容でクラス名を書き換える

CSS:書き換えたクラス名の「見た目(スタイル)」を定義

正規表現:文字列がある形式に沿っているかどうかチェック