JSFiddle - React, Tailwind, and code Playground
HTML
<link rel="stylesheet" href="https://code.htmlhifive.com/h5.css">
<script src="https://code.htmlhifive.com/ejs-h5mod.js"></script>
<script src="https://hifive.github.io/hifive-res/fw/current/h5.dev.js"></script>
<link rel="stylesheet" href="https://www.htmlhifive.com/ja/res/lib/jqplugins/jqueryui/smoothness/jquery-ui-1.9.1.custom.min.css">
<script src="https://www.htmlhifive.com/ja/res/lib/jqplugins/jqueryvalidate/jquery.validate.js"></script>
<form method="get" action="#" id="form1">
<fieldset>
<legend>アンケート</legend>
<div>
<div>好きな食べ物を選択して下さい</div>
<input type="checkbox" value="1" name="food">和食 <input
type="checkbox" value="2" name="food">中華 <input
type="checkbox" value="3" name="food">イタリアン <input
type="checkbox" value="4" name="food">フレンチ <span
class="errorMsg"></span>
</div>
<br>
<div>
<div>タバコを吸っていますか?</div>
<div>
<input type="radio" value="yes" name="conf_tobacco">はい <input
type="radio" value="no" name="conf_tobacco">いいえ <span
class="errorMsg"></span>
</div>
<br>
<div>1日の喫煙本数</div>
<div>
<input type="text" name="count">本 <span class="errorMsg"></span>
</div>
</div>
</fieldset>
<p>
<fieldset>
<legend>ユーザ情報登録</legend>
<div>
<div>URL(任意)</div>
<input type="text" name="url"> <span class="errorMsg"></span>
</div>
<p>
<div>
<div>ユーザID ("hifive"以外を入力すると「入力されたユーザ名は既に使用されています」がエラーメッセージに表示されます)</div>
<input type="text" name="userid"> <span class="errorMsg"></span>
</div>
<div>
<div>パスワードを入力(8~12文字)</div>
<input type="password" name="pass"> <span class="errorMsg"></span>
</div>
<div>
<div>パスワードを再入力</div>
<input type="password" name="conf_pass"> <span
class="errorMsg"></span>
</div>
<br>
</fieldset>
<br> <input type="submit" value="送信">
</form>
CSS
@charset "utf-8";
#form1 {
border: 1px solid black;
padding: 15px;
}
.errorMsg {
color: red;
}
.strong {
font-weight: bold;
}
.rules {
border-collapse: collapse;
}
.rules td {
border: 1px solid black;
}
JavaScript
$(function() {
h5.core.controller('body', {
__name: 'sample.plugin.validationSampleController',
__ready:function() {
// バリデーターにルールやメッセージ等を設定
this.$find('#form1').validate({
// Submitイベントが実行された場合に、自動でバリデーションを実行
onsubmit: true,
// フォーカスが当たった場合に現在のエラー内容を一旦クリア
focusCleanup: true,
// バリデーションルール
rules: {
food: {
required: true
},
conf_tobacco: {
required: true
},
count: {
required: {
depends: '[name="conf_tobacco"][value="yes"]:checked'
},
number: {
depends: '[name="conf_tobacco"][value="yes"]:checked'
},
min: {
param: 1,
depends: '[name="conf_tobacco"][value="yes"]:checked'
},
max: {
param: 999,
depends: '[name="conf_tobacco"][value="yes"]:checked'
}
},
url: {
url: true
},
// useridをパラメータのキーにして、/existsに結果を問い合わせる
// サーバは"true"または"false"の文字列を返す必要がある
userid: {
required: true,
minlength: 6,
remote: '/exists'
},
pass: {
required: true,
rangelength: [8, 12]
},
conf_pass: {
equalTo: '[name="pass"]'
},
policy: {
required: true
}
},
messages: { // エラー時に表示するメッセージ
food: {
required: '1つ以上選択して下さい。'
},
conf_tobacco: {
required: 'はい、またはいいえを選択して下さい'
},
count: {
required: '「はい」を選択した場合は、喫煙本数を入力して下さい',
number: '本数は数字で入力して下さい',
min: '{0}以上の値を入力して下さい',
max: '{0}以下の値で入力して下さい'
},
url: {
url: '正しいURLを入力して下さい'
},
userid: {
required: 'ユーザIDを入力して下さい。',
minlength: '{0}以上で入力して下さい。',
remote: '入力されたユーザ名は既に使用されています'
},
pass: {
required: 'パスワードを入力して下さい',
rangelength: '{0}以上{1}文字以下で入力して下さい'
},
conf_pass: {
equalTo: 'パスワードが一致しません'
}
},
// エラーメッセージの表示先を指定する
errorPlacement: function(error, el)...