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. <script type="text/javascript">
  9.   $(document).ready(function () {
  10.     ko.applyBindings(new ViewModel());
  11.   });
  12.   function ViewModel() {
  13.     var self = this;
  14.     self.statusOrder = ko.observable("Edit");
  15.     // 品名データ
  16.     self.itemData = ko.observableArray([
  17.       {"name": "ねぎ間",         "price": "168"},
  18.       {"name": "ハツ",           "price": "136"},
  19.       {"name": "レバー",         "price": "136"},
  20.       {"name": "ぼんちり",       "price": "136"},
  21.       {"name": "はらみ",         "price": "136"},
  22.       {"name": "うずら玉子",     "price": "136"},
  23.       {"name": "なんこつ",       "price": "136"},
  24.       {"name": "手羽先",         "price": "168"},
  25.       {"name": "せせり",         "price": "136"},
  26.       {"name": "白レバー",       "price": "168"},
  27.       {"name": "丸ごとシマウマ", "price": "290"}
  28.     ]);
  29.     // 品名の初期値
  30.     self.selected = ko.observable(self.itemData()[10]);
  31.     // 注文内容
  32.     self.Order = ko.observable();
  33.     self.Item  = ko.computed(function() { return self.selected().name; }, self);
  34.     self.Price = ko.computed(function() { return self.selected().price; }, self);
  35.     // 「確認」ボタンが押されたとき
  36.     self.gotoOrder = function()
  37.     {
  38.       self.statusOrder("Confirm");
  39.     }
  40.     // 「やりなおす」ボタンが押されたとき
  41.     self.gotoEdit = function()
  42.     {
  43.       self.statusOrder("Edit");
  44.     }
  45.     // 「確定」ボタンが押されたとき
  46.     self.gotoConfirm = function()
  47.     {
  48.       self.statusOrder("Decision");
  49.     }
  50.   }
  51. </script>
  52. <style>
  53.   table
  54.   {
  55.     border-collapse:collapse;
  56.     margin:0;
  57.   }
  58.   th, td
  59.   {
  60.     text-align:left;
  61.     vertical-align:top;
  62.     padding:8px;
  63.     font-weight:normal;
  64.     border:1px solid #ccc;
  65.   }
  66.   th
  67.   {
  68.     background:#f3f3f3;
  69.   }
  70. </style>
  71. </head>
  72. <body>
  73. <h1>formで入力・確認・終了画面の切替</h1>
  74. <!-- 入力 -->
  75. <!-- ko if : statusOrder() == "Edit" -->
  76. <form data-bind="submit: gotoOrder">
  77.   <table>
  78.   <tr><th>注文者</th><td><input type="text" name="order" data-bind="value: Order, valueUpdate: 'afterkeydown'" /></td></tr>
  79.   <tr><th>商品</th><td><select name="item" data-bind="options: itemData, optionsText: 'name', value: selected"></select></td></tr>
  80.   <tr><th>単価(円)</th><td data-bind="text: Price"></td></tr>
  81.   </table>
  82.   <div style="margin-top:6px;">
  83.   <button type="submit">確認</button>
  84.   </div>
  85. </form>
  86. <!-- /ko -->
  87. <!-- 確認 -->
  88. <!-- ko if : statusOrder() == "Confirm" -->
  89. <form>
  90.   <table>
  91.   <tr><th>注文者</th><td data-bind="text: Order"></td></tr>
  92.   <tr><th>商品</th><td data-bind="text: Item"></td></tr>
  93.   <tr><th>単価(円)</th><td data-bind="text: Price"></td></tr>
  94.   </table>
  95.   <div style="margin-top:6px;">
  96.   <button data-bind="click: gotoEdit">やりなおす</button>
  97.   <button data-bind="click: gotoConfirm">確定</button>
  98.   </div>
  99. </form>
  100. <!-- /ko -->
  101. <!-- 終了 -->
  102. <!-- ko if : statusOrder() == "Decision" -->
  103. <div style="font-size:1.2em;color:red;">下記で確定いたしました。</div>
  104. <table>
  105. <tr><th>注文者</th><td data-bind="text: Order"></td></tr>
  106. <tr><th>商品</th><td data-bind="text: Item"></td></tr>
  107. <tr><th>単価(円)</th><td data-bind="text: Price"></td></tr>
  108. </table>
  109. <!-- /ko -->
  110. <div style="font-size:10pt;text-align:right;margin-top:0.5em;">
  111. <a href="//tips.recatnap.info/" target="_top">PCスキルの小技・忘却防止メモ</a> -
  112. <a href="//tips.recatnap.info/wiki/" target="_top">PCスキルの小技・忘却防止メモのまとめ(wiki)</a>
  113. </div>
  114. <div style="font-size:10pt;text-align:center;margin-top:0.5em;padding:0.5em;border-top:1px solid #ccc;">
  115. Copyright &copy; 2009 by PCスキルの小技・忘却防止メモ. All rights reserved.
  116. </div>
  117. </body>
  118. </html>