formの入力項目のチェック

  1. <!DOCTYPE html>
  2. <html lang="ja">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>formの入力項目のチェック</title>
  6. <script type="text/javascript" src="jquery-1.5.1.min.js"></script>
  7. <script type="text/javascript" src="knockout-2.1.0beta.js"></script>
  8. <style type="text/css">
  9. </style>
  10. <script type="text/javascript">
  11.   function viewModel() {
  12.     var self = this;
  13.     
  14.     // 必須項目
  15.     self.need = ko.observable({
  16.       a01: ko.observable(""),
  17.       a02: ko.observable(""),
  18.       a03: ko.observable(""),
  19.       a04: ko.observable("")
  20.     });
  21.     
  22.     // エラー
  23.     self.mess = ko.observable({
  24.       a01: ko.observable(""),
  25.       a02: ko.observable(""),
  26.       a03: ko.observable(""),
  27.       a04: ko.observable("")
  28.     });
  29.     
  30.     // 入力項目の監視
  31.     self.sendBtn = ko.computed( function()
  32.     {
  33.       // データがセットされる前なので放置でOK
  34.       if (self.need() == undefined) {
  35.         return false;
  36.       }
  37.       
  38.       // sendBtnのカウント
  39.       var cntSendBtn = 0;
  40.       
  41.       // 監視
  42.       for (var key in self.need()) {
  43.         if (self.need()[key]() == "") {
  44.           self.mess()[key](key + "は、必須項目です");
  45.           cntSendBtn++;
  46.         }
  47.         else {
  48.           self.mess()[key]("");
  49.         }
  50.       }
  51.       
  52.       if (0 < cntSendBtn) {
  53.         return false;
  54.       }
  55.       else
  56.       {
  57.         return true;
  58.       }
  59.     }, this);
  60.     
  61.   }
  62.   $(document).ready(function () {
  63.     ko.applyBindings(new viewModel());
  64.   });
  65. </script>
  66. </head>
  67. <body>
  68. <h1>formの入力項目のチェック</h1>
  69. <p>すべての項目が何か入力されていたら、ボタンの押下が可能になる。</p>
  70. <ul>
  71. <li>a01:<input type="text" data-bind="value: need().a01, valueUpdate: 'afterkeydown'" /><span data-bind="text: mess().a01"></span></li>
  72. <li>a02:<input type="text" data-bind="value: need().a02, valueUpdate: 'afterkeydown'" /><span data-bind="text: mess().a02"></span></li>
  73. <li>a03:<input type="text" data-bind="value: need().a03, valueUpdate: 'afterkeydown'" /><span data-bind="text: mess().a03"></span></li>
  74. <li>a04:<input type="text" data-bind="value: need().a04, valueUpdate: 'afterkeydown'" /><span data-bind="text: mess().a04"></span></li>
  75. </ul>
  76. <input type="submit" data-bind="enable: sendBtn" />
  77. <div style="font-size:10pt;text-align:right;margin-top:0.5em;">
  78. <a href="//tips.recatnap.info/" target="_top">PCスキルの小技・忘却防止メモ</a> -
  79. <a href="//tips.recatnap.info/wiki/" target="_top">PCスキルの小技・忘却防止メモのまとめ(wiki)</a>
  80. </div>
  81. <div style="font-size:10pt;text-align:center;margin-top:0.5em;padding:0.5em;border-top:1px solid #ccc;">
  82. Copyright &copy; 2009 by PCスキルの小技・忘却防止メモ. All rights reserved.
  83. </div>
  84. </body>
  85. </html>