QUnit,PHP,Netbeans,lubuntu-14.04,VirtualBox
(゚ω゚) の続き。
(゚ω゚) 今回は、exValidationを動かしてみる予定だったが、
(゚ω゚) jQueryのフォームの入力チェックを調べてみようと思う。
(゚ω゚) いろいろな組織からアプリをかき集めるよりも、jQuery一本に絞れば不具合も出ないだろう。
(゚ω゚) という思惑。
http://plugins.jquery.com/?s=validation
http://plugins.jquery.com/validation/
jQuery Validation
Form validation made easy. Validate a simple comment form with inline rules, or a complex signup form with powerful remote checks.
(゚ω゚)「Read the Docs」に最新ソースを置いている。
![](https://stat.ameba.jp/user_images/20140605/07/pochifx/3a/34/p/o0778045912963368382.png?caw=800)
http://jqueryvalidation.org/
![](https://stat.ameba.jp/user_images/20140605/07/pochifx/7f/0d/p/o0762074012963373285.png?caw=800)
(゚ω゚) ホームページのzipと、GitHubのzip、入ってる内容は同じなのか比較してみた。
(゚ω゚) GitHubのzipのほうがファイル数が多い。
https://github.com/jzaefferer/jquery-validation/tree/1.12.0
![](https://stat.ameba.jp/user_images/20140605/07/pochifx/ca/d9/p/o0800057312963386633.png?caw=800)
(゚ω゚) GitHubの管理ファイルか?
(゚ω゚) "jQuery Validation"は、どういうテストをしたのか見ないと使う気にはなれない。
![](https://stat.ameba.jp/user_images/20140605/09/pochifx/94/0d/p/o0800103712963446742.png?caw=800)
(゚ω゚)まず、不明な2つのjQueryプラグインから調べよう。
![](https://stat.ameba.jp/user_images/20140605/14/pochifx/4e/39/p/o0800067712963650428.png?caw=800)
http://plugins.jquery.com/?s=form
(゚ω゚)で、検索・・・。これか。
http://plugins.jquery.com/form/
Form
by M. Alsup
A simple way to AJAX-ify any form on your page; with file upload and progress support.
(゚ω゚)ドキュメントはここか。
http://jquery.malsup.com/form/
(゚ω゚)↓ここの説明が参考になる。
http://weble.org/2012/02/27/jquery-form-plugin
Date: 2012/02/27
Category: jQuery
jQuery でフォームを簡単に Ajax に対応させてしまう jQuery Form Plugin が凄く便利
(゚ω゚)簡単に言うと、画面遷移せずにちょっとした入力画面、例えば人であることを証明するような入力画面等を表示するためのプラグイン。
(゚ω゚)という事か・・。
(゚ω゚)次は、mockjax
http://plugins.jquery.com/?s=mockjax
Search Results for: mockjax
Nothing Found
Apologies, but nothing matched your search criteria.
(゚ω゚) プラグイン登録してないけど、jQuery使ってるライブラリもあるのか・・。
https://www.google.co.jp/search?q=jQuery.mockjax.js
https://github.com/appendto/jquery-mockjax
(゚ω゚)あたかもAjax通信してるように装うことができる。
http://tnakamura.hatenablog.com/entry/20111101/jquery_mockjax
2011-11-01 jquery-mockjax 使えよ色々と捗るぞ
サーバーの API を呼び出すときは、モックを登録しているコードをコメントアウトすればいいだけ。UI の部分には一切手を加える必要なし。
jquery-mockjax を使えば、サーバー側の実装がまったく無くても開発が進められます。JavaScript での UI 開発はもう jquery-mockjax 無しでは考えられないです。
(゚ω゚)念の為、 mockで検索してみると・・・
http://plugins.jquery.com/?s=mock
http://plugins.jquery.com/ajaxmock/
jQuery.ajaxMock – a tiny but yet powerful mocking plugin for jQuery 1.5+
(゚ω゚)上下逆転しただけのネーミングw
(゚ω゚)解析は続く・・・・・
(゚ω゚) jQuery ValidationのテストにjQuery.mockjax.jsを使っている理由は、
(゚ω゚) リモートのデータもチェックする機能があるという事なのか?
(゚ω゚) users.phpが検索したユーザー名をチェックしているように見える。
![](https://stat.ameba.jp/user_images/20140605/18/pochifx/68/23/p/o0766143412963836422.png?caw=800)
(゚ω゚)奇妙な処理順序①~⑦は、前ブログ
http://ameblo.jp/pochifx/entry-11858257637.html
QUnit,PHP,Netbeans,lubuntu-14.04,VirtualBox
2014-06-04
(゚ω゚) にも書いてある async-control の場合と同じだった。こういうフローなんだろう。
(゚ω゚)とりあえず、APIは全部試してみるか・・。
(゚ω゚)使い方は jquery-validation-1.12.0/test/index.htmlを見たら分かるし。
http://jqueryvalidation.org/documentation/
http://jqueryvalidation.org/documentation/#validate-forms-like-you-ve-never-validated-before
(゚ω゚)最初は簡単に動いた。
![](https://stat.ameba.jp/user_images/20140606/12/pochifx/18/04/p/o0800106512964545875.png?caw=800)
http://jqueryvalidation.org/documentation#api-documentation
http://jqueryvalidation.org/validate#debug
(゚ω゚)確かに、サーバーと通信しなかった。
![](https://stat.ameba.jp/user_images/20140606/16/pochifx/72/c7/p/o0718088912964725705.png?caw=800)
http://jqueryvalidation.org/validate#ignore
(゚ω゚)ignoreも混ぜた書き方は、jQueryと一緒か・・。
![](https://stat.ameba.jp/user_images/20140607/12/pochifx/65/0a/p/o0715088812965523048.png?caw=800)
http://jqueryvalidation.org/validate#rules
(゚ω゚)name属性の値で、入力チェックのルール付けが出来る。
![](https://stat.ameba.jp/user_images/20140607/14/pochifx/2a/b6/p/o0681090112965632084.png?caw=800)
(゚ω゚) rulesのドキュメントには、動かないExampleを置いている。
(゚ω゚) メール入力欄を2個作ったのだが、下側のほうしか動かない。
![](https://stat.ameba.jp/user_images/20140608/17/pochifx/fc/dd/p/o0800132512966810950.png?caw=800)
(゚ω゚)今後、また試すため、動かなかったExampleを貼っておく。
Example: Specifies a contact element as required and as email address, the latter depending on a checkbox being checked for contact via email.
$(".selector").validate({
rules: {
contact: {
required: true,
email: {
depends: function(element) {
return $("#contactform_email:checked")
}
}
}
}
});
http://jqueryvalidation.org/validate#invalidhandler
(゚ω゚) 同じ処理のinvalidHandlerは、functionとして共通化が出来る。
(゚ω゚) チェックするフォームを振り分ける部分は、これ。
var formId = "#" + validator.currentForm["id"];
(゚ω゚) ブラウザでデバッグしてて、validatorオブジェクトの中を見ていたら気づいた。
(゚ω゚) そして、下記のルールがあることに気づいた。
<body>に記述する要素の順番。
1.<form>
2.<script>
script要素を上に記述すると、デフォルトの動作のみ。
![](https://stat.ameba.jp/user_images/20140611/16/pochifx/a6/d6/p/o0800171812969870067.png?caw=800)
<body>
<!--
http://jqueryvalidation.org/rules
dependsは他の要素を判断することが出来る。
http://jqueryvalidation.org/validate#invalidhandler
$("div.error").show()でエラーメッセージを表示している。
-->
<form class="cmxform" id="commentForm1" method="get" action="">
<fieldset>
<legend>commentForm debug=false</legend>
<p>
<label for="cname">名前 (必須。3文字以上)</label>
<!-- <input id="cname" name="name" minlength="3" type="text" required/> -->
<input id="This_name_is_not_used_in_the_rules" name="name" type="text" />
</p>
<p>
<label for="NG_Example">例が間違ってる</label>
<input type="checkbox" class="selectCLASS" id="NG_Example" ><input name="contactNG"/><BR>
<label for="clickemail">Contact email</label>
<!-- <input id="cemail" type="email" name="email" required/> -->
<input type="checkbox" id="clickemail" ><input id="cemail" name="emailValue"/><BR>
</p>
<p>
<input class="submit" type="submit" value="登録"/>
</p>
<div class="error">エラー★<span></span></div>
</fieldset>
</form>
<BR>
<form class="cmxform" id="commentForm" method="get" action="">
<fieldset>
<legend>Please provide your name, email address (won't be published) and a comment</legend>
<p>
<label for="cname">Name (required, at least 2 characters)</label>
<input id="cname" name="name" minlength="2" type="text" required/>
</p>
<p>
<label for="cemail">E-Mail (required)</label>
<input id="cemail" type="email" name="email" required/>
</p>
<p>
<label for="curl">URL (optional)</label>
<input id="curl" type="url" name="url"/>
</p>
<p>
<label for="ccomment">Your comment (required)</label>
<textarea id="ccomment" name="comment" required></textarea>
</p>
<p>
<input class="submit" type="submit" value="Submit"/>
</p>
<div class="error">エラー★<span></span></div>
</fieldset>
</form>
<script>
/* ------------------------------------------
* 無効な入力の項目数を表示
* @param {type} event
* @param {type} validator
* @returns {undefined}
*/
var invalidFnc = function(event, validator) {
// 'this' refers to the form
var errors = validator.numberOfInvalids();
var formId = "#" + validator.currentForm["id"];
if (errors) {
var message = errors == 1
? 'You missed 1 field. It has been highlighted'
: 'You missed ' + errors + ' fields. They have been highlighted';
$(formId + " div.error span").html(message);
$(formId + " div.error").show();
} else {
$(formId + " div.error").hide();
}
};
$(".selectCLASS").validate({//このクラスを使っている要素は1つのみ
rules: {
contactNG: {
required: true,
email: {
depends: function(element) {
return $("#NG_Example:checked");//動かん・・・
}
}
}
}
});
$("#commentForm1").validate({
rules: {
// simple rule, converted to {required:true}
// name: "required",/* name属性="name"と書くと必須になる。*/
// ルールを複数組み合わせたい場合は括弧{}で囲む。
name: {// name属性="name"は、3文字以上且つ必須。
required: true,
minlength: 3
},
// compound rule
emailValue: {// name="emailValue"属性を持っている要素は、
// id="emailcheck"のチェックボックスが1個選択されると
// return trueし、email風なのかチェックする。
email: {
depends: function(element) {
if (1 === $("#clickemail:checked").length) {
return true;//emailチェックする
} else {
return false;//emailチェックしない
}
}
}
}
},
invalidHandler: invalidFnc
});
$("#commentForm").validate({
debug: false,
submitHandler: function(form) {
$(form).ajaxSubmit();
//form.submit();
},
ignore: ".ignore", // ignoreクラスはチェックしません
invalidHandler: invalidFnc
});
</script>
</body>
http://jqueryvalidation.org/validate#messages
(゚ω゚) messages と rules の例。
![](https://stat.ameba.jp/user_images/20140612/13/pochifx/88/6b/p/o0772116712970718217.png?caw=800)
http://jqueryvalidation.org/validate#groups
(゚ω゚) groupstとは、同じグループならば、
(゚ω゚) エラーメッセージをどれか1個にする場合に用いる。
![](https://stat.ameba.jp/user_images/20140612/20/pochifx/a0/1c/p/o0770170912971018837.png?caw=800)
http://jqueryvalidation.org/validate#onfocusout
(゚ω゚) onfocusoutを記述すると(true falseの値は何でも良い)
(゚ω゚) フォーカスアウト時のエラーチェックが行われない。
(゚ω゚) jquery-validation-1.12.0/dist/jquery.validate.js を使用。
http://jqueryvalidation.org/validate#focuscleanup
(゚ω゚) onfocusout onkeyup onclick focusInvalid は使い方が不明。
(゚ω゚) これらは、test.jsにも記述が無かったり、使わないほうがよい。
![](https://stat.ameba.jp/user_images/20140618/13/pochifx/79/b1/p/o0712092712976827803.png?caw=800)
http://jqueryvalidation.org/validate#errorclass
(゚ω゚) 入力エラーの場合、errorClassに指定したクラス属性が追加される。
(゚ω゚) その要素とは、input要素とデフォルトエラー表示(ラベル?)らしい。
![](https://stat.ameba.jp/user_images/20140618/22/pochifx/d5/30/p/o0744155612977276082.png?caw=800)
http://jqueryvalidation.org/validate#validclass
(゚ω゚) 妥当な値の場合、input要素には「validClassで指定したクラス」属性が追加される
![](https://stat.ameba.jp/user_images/20140619/00/pochifx/ba/8e/p/o0800147512977418003.png?caw=800)
http://jqueryvalidation.org/validate#wrapper
http://jqueryvalidation.org/validate#errorlabelcontainer
(゚ω゚) wrapperとerrorLabelContainerを使ったエラーメッセージを纏める例。
![](https://stat.ameba.jp/user_images/20140620/12/pochifx/45/37/p/o0746135012978716759.png?caw=800)
http://jqueryvalidation.org/validate#errorcontainer
(゚ω゚) 参考になったソースなのだが、おしい・・。
(゚ω゚) name属性が紐付けとなっている事がコーディングされていない。
http://blog.baister.net/2012/07/12/moving-jquery-validation-error-messages/
(゚ω゚) rules と messages は、name属性を見ている。
![](https://stat.ameba.jp/user_images/20140622/21/pochifx/a3/d1/p/o0630129812981181582.png?caw=800)
(゚ω゚)デバッグすると、input要素のid属性の値が、エラーのラベルのidに使われていた。
![](https://stat.ameba.jp/user_images/20140623/02/pochifx/e5/0f/p/o0800086112981520665.png?caw=800)
(゚ω゚) defaultShowErrors()が、エラーコンテナのdiv要素に、
(゚ω゚) style="display: block;"という属性を追加し、エラーコンテナを表示させていた。
![](https://stat.ameba.jp/user_images/20140623/03/pochifx/bf/97/p/o0800099612981528527.png?caw=800)
http://jqueryvalidation.org/validate#showerrors
(゚ω゚) errotMapとerrorListにはエラーが増えた場合に値が入り、
(゚ω゚) 正しい値を入力してエラーが減った場合は空である。
![](https://stat.ameba.jp/user_images/20140624/21/pochifx/a9/6e/p/o0620099212983315592.png?caw=800)
http://jqueryvalidation.org/validate#errorplacement
(゚ω゚)参考にしたスクリプトは
https://gist.github.com/nissuk/780757
(゚ω゚)なのだが、このソースはデバッグしてないと思う。
(゚ω゚)デバッグしているのであれば、変数elp等に代入しているハズ。
![](https://stat.ameba.jp/user_images/20140626/18/pochifx/7a/ce/p/o0760100912985093251.png?caw=800)
http://jqueryvalidation.org/validate#success
(゚ω゚) successのクラス名だけを設定する意味は、
(゚ω゚) エラーメッセージのラベルを見えなくする為だろうか?
![](https://stat.ameba.jp/user_images/20140628/04/pochifx/9d/5e/p/o0676121612986439602.png?caw=800)
http://jqueryvalidation.org/validate#highlight
(゚ω゚) 入力エラーとなった要素がelementに渡されて、highlightのfunctionが呼ばれる。
![](https://stat.ameba.jp/user_images/20140704/01/pochifx/d8/62/p/o0767080712992560117.png?caw=800)