フォームの入力チェックをするでフォームの入力チェックの拡張機能を作成しましたが、もうすこし使いやすくしました。
jQuery を読み込んだ後に読み込んでください。
20130826.js
まず HTML 側にクラスを指定します。使用するクラス名は以下のとおりです。
- error-block
- チェックしたい入力の要素とエラーメッセージの要素を囲むブロックです
- error-text
- エラーメッセージを出す要素です
- required
- 必須項目にしたい
input
またはtextarea
またはselect
に指定します。未選択のselect
のvalue
は -1 を設定します。 - numeric
- 数字のみ許可したい
input
に指定します。 - alphabetic
- アルファベットのみ許可したい
input
に指定します。 - hiragana
- ひらがなのみ許可したい
input
に指定します。 - katakana
- カタカナのみ許可したい
input
に指定します。 - メールアドレスのみ許可したい
input
に指定します。 - zenkaku
- 全角のみ許可したい
input
に指定します。
HTML例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <form> <table> <tr> <th>氏名</th> <td class="error-block"> <input type="text" name="" class="required zenkaku"> <span class="error-text"></span> </td> </tr> <tr> <th>年齢</th> <td class="error-block"> <select name="" class="required"> <option value="-1"></option> <option value="1">1</option> <option value="2">2</option> </select> </td> </tr> </table> </form> |
JavaScript は form
を指定して呼び出すだけです。複数でもできます。
JavaScript
1 2 3 | $('form').formCheck(); |
オプションでエラーメッセージを指定できます。下記例のテキストがデフォルトになっています。
1 2 3 4 5 6 7 8 9 10 11 | $('form').formCheck({ required: '入力してください', numeric: '数字で入力してください', alphabetic: 'アルファベットで入力してください', hiragana: 'ひらがなで入力してください', katakana: 'カタカナで入力してください', mail: 'メールアドレスを入力してください', zenkaku: '全角で入力してください' }); |
ソース
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 | (function ($) { if (!Array.prototype.indexOf) { Array.prototype.indexOf = function (searchElement) { for(var i = 0; i < this.length; i += 1) { if (this[i] === searchElement) return i; } return -1; } } var charCheck = { ascii: function (target) { return !!target.match(/^[x20-x7E]+$/); }, numeric: function (target) { return !!target.match(/^[0-9]+$/); }, alphabetic: function (target) { return !!target.match(/^[a-zA-Z]+$/); }, alphanumeric: function (target) { return !!target.match(/^[a-zA-Z0-9]+$/); }, hiragana: function (target) { return !!target.match(/^[ぁ-ん]+$/); }, katakana: function (target) { return !!target.match(/^[ァ-ン]+$/); }, mail: function (target) { return !!target.match(/^([a-zA-Z0-9])+([a-zA-Z0-9._-])*@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/); }, zenkaku: function (target) { var i, charCode; for (i = 0; i < target.length; i += 1) { charCode = target.charCodeAt(i); if (charCode < 256 || (charCode >= 0xff61 && charCode <= 0xff9f)) { return false; } } return true; } }; var checkOK = function ($that) { $that.parents('.error-block').find('.error-text').text(''); return false; }; var checkNG = function ($that, text) { $that.parents('.error-block').find('.error-text').text(text); return true; }; var requiredCheck = function ($element, options) { var errorFlag = []; $element.each(function (i) { var $this = $(this); var node = this.nodeName.toLowerCase(); var type = $this.attr('type'); if (node === 'select') { errorFlag[i] = $this.val() !== '-1' ? checkOK($this) : checkNG($this, options.required); } else if (node === 'input' || node === 'textarea') { if (type === 'checkbox') { errorFlag[i] = $this.prop('checked') ? checkOK($this) : checkNG($this, options.required); } else { errorFlag[i] = $this.val() !== '' ? checkOK($this) : checkNG($this, options.required); } } }); return (errorFlag.indexOf(true) > -1); }; var inputCheck = function ($element, options) { var errorFlag = []; var i = -1; $element.filter('.numeric').each(function () { var $this = $(this); errorFlag[i += 1] = charCheck.numeric($this.val()) ? checkOK($this) : checkNG($this, options.numeric); }); $element.filter('.alphabetic').each(function () { var $this = $(this); errorFlag[i += 1] = charCheck.alphabetic($this.val()) ? checkOK($this) : checkNG($this, options.alphabetic); }); $element.filter('.hiragana').each(function () { var $this = $(this); errorFlag[i += 1] = charCheck.hiragana($this.val()) ? checkOK($this) : checkNG($this, options.hiragana); }); $element.filter('.katakana').each(function () { var $this = $(this); errorFlag[i += 1] = charCheck.katakana($this.val()) ? checkOK($this) : checkNG($this, options.katakana); }); $element.filter('.mail').each(function () { var $this = $(this); errorFlag[i += 1] = charCheck.mail($this.val()) ? checkOK($this) : checkNG($this, options.mail); }); $element.filter('.zenkaku').each(function () { var $this = $(this); errorFlag[i += 1] = charCheck.zenkaku($this.val()) ? checkOK($this) : checkNG($this, options.zenkaku); }); return (errorFlag.indexOf(true) > -1); }; $.fn.extend({ formCheck: function (options) { var defaults = { required: '入力してください', numeric: '数字で入力してください', alphabetic: 'アルファベットで入力してください', hiragana: 'ひらがなで入力してください', katakana: 'カタカナで入力してください', mail: 'メールアドレスを入力してください', zenkaku: '全角で入力してください' }; var o = $.extend(defaults, options); return this.each(function () { $(this).submit(function () { var $this = $(this); var errorFlag; errorFlag = requiredCheck($this.find('.required'), o); if (!errorFlag) errorFlag = inputCheck($this.find('input'), o); return !errorFlag; }); }); } }); })(jQuery); |
(藤崎)