knockout.jsの表示の内外でクリックしたときに何かする

  1. <!DOCTYPE html>
  2. <html lang="ja">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>knockout.jsの表示の内外でクリックしたときに何かする</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.     BindOfClickEvent();
  12.   });
  13.   
  14.   function ViewModel() {
  15.     var self = this;
  16.     self.jsonData = ko.observableArray();
  17.     $.getJSON("./testdata/testdataB.txt", {}, function(json){
  18.         self.jsonData(json.item);
  19.       }
  20.     );
  21.   }
  22.   
  23.   function BindOfClickEvent()
  24.   {
  25.     $('a.BehaviorClick').bind('click', EventWhenClick);
  26.   }
  27.   
  28.   var EventWhenClick = function (data, event) {
  29.     if (event != undefined)
  30.     {
  31.       // koの中の場合
  32.       htmlDom = event.target;
  33.       elmA = $(htmlDom).parents("a");
  34.     }
  35.     else
  36.     {
  37.       htmlDom = this;
  38.       elmA = $(htmlDom);
  39.     }
  40.     
  41.     elmImg = elmA.children("img");
  42.     
  43.     if ( $(htmlDom).parents("td").css("backgroundColor") == "transparent" )
  44.     {
  45.       elmImg.attr("src", "images/sample_flow2.gif");
  46.       $(htmlDom).parents("td").css("backgroundColor", "#ffffcc");
  47.     }
  48.     else
  49.     {
  50.       elmImg.attr("src", "images/sample_flow1.gif");
  51.       $(htmlDom).parents("td").css("backgroundColor", "transparent");
  52.     }
  53.     
  54.     return false;
  55.   };
  56.   
  57. </script>
  58. <style type="text/css">
  59. table{margin-top:0.5em;}
  60. th, td{
  61.   border:1px solid #ccc;
  62. }
  63. td
  64. {
  65.   padding:8px;
  66. }
  67. caption
  68. {
  69.   white-space:nowrap;
  70. }
  71. img
  72. {
  73.   border:1px solid #333;
  74. }
  75. </style>
  76. </head>
  77. <body>
  78. <h1>knockout.jsの表示の内外でクリックしたときに何かする</h1>
  79. <div class="wrap">
  80. <table>
  81.   <caption>ただの画像</caption>
  82.   <thead><tr><th>クリック</th></thead>
  83.   <tbody>
  84.   <tr>
  85.     <td><a href="#" class="BehaviorClick"><img src="images/sample_flow1.gif" /></a></td>
  86.   </tr>
  87.   </tbody>
  88. </table>
  89. <table>
  90.   <caption>knockout.jsでjsonを読み込み表示したもの</caption>
  91.   <thead><tr><th>品名</th><th>金額</th><th>クリック</th></thead>
  92.   <tbody data-bind="foreach: jsonData">
  93.     <tr>
  94.       <td data-bind="text: name"></td>
  95.       <td data-bind="text: price"></td>
  96.       <td><a href="#" data-bind="click: EventWhenClick"><img src="images/sample_flow1.gif" /></a></td>
  97.     </tr>
  98.   </tbody>
  99. </table>
  100. </div>
  101. <div style="font-size:10pt;text-align:right;margin-top:0.5em;">
  102. <a href="//tips.recatnap.info/" target="_top">PCスキルの小技・忘却防止メモ</a> -
  103. <a href="//tips.recatnap.info/wiki/" target="_top">PCスキルの小技・忘却防止メモのまとめ(wiki)</a>
  104. </div>
  105. <div style="font-size:10pt;text-align:center;margin-top:0.5em;padding:0.5em;border-top:1px solid #ccc;">
  106. Copyright &copy; 2009 by PCスキルの小技・忘却防止メモ. All rights reserved.
  107. </div>
  108. </body>
  109. </html>