exValidationで入力フォームの条件変化に対応する
アンケートなどの入力フォームで、チェックボックスでの条件分岐がしたい場合があると思います。
例えば「その他」を選んだ場合にのみ、テキスト入力を必須にしたいなどです。
今回は exValidation を使用した場合の例を記載いたします。
フォーム部分html
今回は「その他」項目のチェックボックスにidを振り、チェックがあるかないかを確認しています。
<form action="" id="form">
<div class="form_input" id="checkboxes">
<label>
<input type="checkbox" name="checkbox[]" value="チェックボックスa" id="checkbox_a">
チェックボックスa
</label>
<br>
<label>
<input type="checkbox" name="checkbox[]" value="チェックボックスb" id="checkbox_b">
チェックボックスb
</label>
<br>
<label>
<input type="checkbox" name="checkbox[]" value="その他" id="checkbox_other">
その他
</label>
<input size="20" type="text" name="その他を選んだ方" id="checkbox_other_text" />
</div>
<input type="submit" id="submit_btn" value=" 確認 " />
</form>
script部分
「その他」項目(id = checkbox_other)のチェックがあれば、テキスト入力部分(id = checkbox_other_text)を必須入力にし、チェックが無ければ入力を不可にしています。
exValidation は要素の class に chkrequired があれば必須項目とします。ですので、チェックボックスのチェックがあれば、 class に chkrequired を追加し、チェックを外せば、 chkrequired を class から外す処理を記載しています。
それに伴い、テキスト入力部分を入力をできるようにしたり、チェックを外せば入力フォームを空にする処理を追加しています。
<script>
var validation = $("#form")
.exValidation({
// exValidation の設定部分です
rules: {
// チェックボックス自体を必須選択にしています
checkboxes: "chkcheckbox",
// checkbox_other_text を必須に設定しています
checkbox_other_text: "chkrequired"
},
errInsertPos: 'after',
errPosition: 'fixed'
});
var selectable = $('#pref').selectable({
callback: function() {
validation.laterCall('#pref');
}
});
// ページを読み込むときにチェックボックスを確認する
window.addEventListener('DOMContentLoaded',function(){
change_checkbox();
});
// チェックボックス checkbox_other の変化をチェックする
$('#checkbox_other').change(function() {
change_checkbox();
validation.laterCall('#checkbox_other_text');
});
// checkbox_other_text テキスト入力の入力変化をチェックする
$('#checkbox_other_text').change(function() {
validation.laterCall('#checkbox_other_text');
});
// ”その他”にチェックがある場合 checkbox_other_text の chkrequiredを追加あるいは削除する処理
function change_checkbox() {
const input = document.getElementById('checkbox_other_text');
const checkbox = document.getElementById('checkbox_other').checked;
if (checkbox == true) { // 「その他」にチェックがある場合
input.disabled = false; // テキスト入力欄を使用できるようにする
$('#checkbox_other_text').addClass('chkrequired');
} else if(checkbox == false) { // 「その他」にチェックがない場合
input.disabled = true; // テキスト入力欄を使用できないようにする
input.value = ''; // テキスト入力欄を空にする
$('#checkbox_other_text').removeClass('chkrequired');
}
}
</script>
全ソース
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!-- exValidation 関連JS css -->
<script type="text/javascript" src="scripts/jquery.js"></script>
<script type="text/javascript" src="scripts/jQselectable.js"></script>
<script type="text/javascript" src="scripts/jquery.easing.js"></script>
<script type="text/javascript" src="scripts/exvalidation.js"></script>
<script type="text/javascript" src="scripts/exchecker-ja.js"></script>
<link type="text/css" rel="stylesheet" href="css/exvalidation.css" />
</head>
<body>
<form action="" id="form">
<div class="form_input" id="checkboxes">
<label>
<input type="checkbox" name="checkbox[]" value="チェックボックスa" id="checkbox_a">
チェックボックスa
</label>
<br>
<label>
<input type="checkbox" name="checkbox[]" value="チェックボックスb" id="checkbox_b">
チェックボックスb
</label>
<br>
<label>
<input type="checkbox" name="checkbox[]" value="その他" id="checkbox_other">
その他
</label>
<input size="20" type="text" name="その他を選んだ方" id="checkbox_other_text" />
</div>
<input type="submit" id="submit_btn" value=" 確認 " />
</form>
<script>
var validation = $("#form")
.exValidation({
rules: {
checkboxes: "chkcheckbox",
checkbox_other_text: "chkrequired",
},
errInsertPos: 'after',
errPosition: 'fixed'
});
var selectable = $('#pref').selectable({
callback: function() {
validation.laterCall('#pref');
}
});
// ページを読み込むときにチェックボックスを確認する
window.addEventListener('DOMContentLoaded',function(){
change_checkbox();
});
// チェックボックス checkbox_other の変化をチェックする
$('#checkbox_other').change(function() {
change_checkbox();
validation.laterCall('#checkbox_other_text');
});
// checkbox_other_text テキスト入力の入力変化をチェックする
$('#checkbox_other_text').change(function() {
validation.laterCall('#checkbox_other_text');
});
// ”その他”にチェックがある場合 checkbox_other_text の chkrequiredを追加あるいは削除する処理
function change_checkbox() {
const input = document.getElementById('checkbox_other_text');
const checkbox = document.getElementById('checkbox_other').checked;
if (checkbox == true) {
input.disabled = false; // テキスト入力欄を使用できるようにする
$('#checkbox_other_text').addClass('chkrequired');
} else if(checkbox == false) {
input.disabled = true; // テキスト入力欄を使用できないようにする
input.value = ''; // テキスト入力欄を空にする
$('#checkbox_other_text').removeClass('chkrequired');
}
}
</script>
</body>
</html>