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.     // 品名データ
  15.     self.itemData = ko.observableArray([
  16.       {"name": "ねぎ間",         "price": "168"},
  17.       {"name": "ハツ",           "price": "136"},
  18.       {"name": "レバー",         "price": "136"},
  19.       {"name": "ぼんちり",       "price": "136"},
  20.       {"name": "はらみ",         "price": "136"},
  21.       {"name": "うずら玉子",     "price": "136"},
  22.       {"name": "なんこつ",       "price": "136"},
  23.       {"name": "手羽先",         "price": "168"},
  24.       {"name": "せせり",         "price": "136"},
  25.       {"name": "白レバー",       "price": "168"},
  26.       {"name": "丸ごとシマウマ", "price": "290"}
  27.     ]);
  28.     // 品名の初期値
  29.     self.selected = ko.observable(self.itemData()[10]);
  30.     
  31.     // 注文内容
  32.     self.Order = ko.observable();
  33.     self.Item  = ko.computed(function() { return self.selected().name; }, self);
  34.     self.Taste = ko.observable();
  35.     self.Price = ko.computed(function() { return self.selected().price; }, self);
  36.     // オーダーボタンが押されたとき
  37.     self.gotoOrder = function()
  38.     {
  39.       if (this.Order() == undefined)
  40.       {
  41.         orderName = "名無し";
  42.       }
  43.       else
  44.       {
  45.         orderName = this.Order();
  46.       }
  47.       
  48.       if (this.Taste() == undefined)
  49.       {
  50.         orderTaste = "おまかせ";
  51.       }
  52.       else
  53.       {
  54.         orderTaste = this.Taste();
  55.       }
  56.       
  57.       msg = "";
  58.       msg += "注文者:" + orderName    + "\n";
  59.       msg += "商品名:" + this.Item()  + "\n";
  60.       msg += " 味 :" + orderTaste   + "\n";
  61.       msg += "価 格:" + this.Price() + "円\n";
  62.       alert(msg);
  63.     }
  64.     
  65.   }
  66. </script>
  67. <style>
  68.   table
  69.   {
  70.     border-collapse:collapse;
  71.     margin:0;
  72.   }
  73.   th, td
  74.   {
  75.     text-align:left;
  76.     vertical-align:top;
  77.     padding:8px;
  78.     font-weight:normal;
  79.     border:1px solid #ccc;
  80.   }
  81.   th
  82.   {
  83.     background:#f3f3f3;
  84.   }
  85. </style>
  86. </head>
  87. <body>
  88. <h1>formの入力と値のサンプル</h1>
  89. <table>
  90. <tr><th>注文者</th><td><input type="text" data-bind="value: Order" /></td></tr>
  91. <tr><th>商品</th><td><select data-bind="options: itemData, optionsText: 'name', value: selected"></select></td></tr>
  92. <tr><th>味</th>
  93.   <td>
  94.   <label><input type="radio" name="tasteGroup" data-bind="checked: Taste" value="たれ" />たれ</label> /
  95.   <label><input type="radio" name="tasteGroup" data-bind="checked: Taste" value="塩" />塩</label> /
  96.   <label><input type="radio" name="tasteGroup" data-bind="checked: Taste" value="味噌" />味噌</label> /
  97.   <label><input type="radio" name="tasteGroup" data-bind="checked: Taste" value="明太子" />明太子</label> /
  98.   <label><input type="radio" name="tasteGroup" data-bind="checked: Taste" value="ネギマヨ" />ネギマヨ</label>
  99.   </td>
  100. </tr>
  101. <tr><th>価格</th><td><span data-bind="text: Price"></span> 円</td></tr>
  102. </table>
  103. <div style="margin-top:6px;"><button data-bind="click: gotoOrder">注文</button></div>
  104. <div style="font-size:10pt;text-align:right;margin-top:0.5em;">
  105. <a href="//tips.recatnap.info/" target="_top">PCスキルの小技・忘却防止メモ</a> -
  106. <a href="//tips.recatnap.info/wiki/" target="_top">PCスキルの小技・忘却防止メモのまとめ(wiki)</a>
  107. </div>
  108. <div style="font-size:10pt;text-align:center;margin-top:0.5em;padding:0.5em;border-top:1px solid #ccc;">
  109. Copyright &copy; 2009 by PCスキルの小技・忘却防止メモ. All rights reserved.
  110. </div>
  111. </body>
  112. </html>