フォーカスがあたったらボタンを表示して、ボタンが押されるまで表示し続ける

  1. <!DOCTYPE html>
  2. <html lang="ja">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>フォーカスがあたったらボタンを表示して、ボタンが押されるまで表示し続ける</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.focusInput = ko.observable(false);
  15.     self.inputData = ko.observable("");
  16.     self.activeDataArea = ko.observable(false);
  17.     self.addDataArea = ko.computed(function() {
  18.       if (self.focusInput() == true)
  19.       {
  20.         // フォーカスがあたったときactiveDataArea()とtrueにしておくフォーカスが外れても問題ないように。
  21.         self.activeDataArea(true);
  22.         return true;
  23.       }
  24.       else if (self.activeDataArea() == true)
  25.       {
  26.         // フォーカスが外れ、activeDataArea()がtrueのとき
  27.         return true;
  28.       }
  29.       return false;
  30.     }, self);
  31.     self.addData1 = function()
  32.     {
  33.       self.inputData("丸ごとしまうま");
  34.       self.activeDataArea(false);
  35.     }
  36.     self.addData2 = function()
  37.     {
  38.       self.inputData("ねぎま");
  39.       self.activeDataArea(false);
  40.     }
  41.   }
  42. </script>
  43. <style type="text/css">
  44. .inData
  45. {
  46.   position:absolute;
  47.   top:0;
  48.   left:20px;
  49.   width:200px;
  50.   padding:10px;
  51.   background:#f0f0f0;
  52.   border:1px solid #ccc;
  53.   cursor:pointer;
  54. }
  55. </style>
  56. </head>
  57. <body>
  58. <h1>フォーカスがあたったらボタンを表示して、ボタンが押されるまで表示し続ける</h1>
  59. <input type="text" data-bind="hasfocus: focusInput, value: inputData" /><br />
  60. <div style="position:relative;top:0;left:0;background:red;" data-bind="visible: addDataArea">
  61.   <button data-bind="event: {click: addData1}, clickBubble: false">「丸ごとしまうま」を追加</button>
  62.   <button data-bind="event: {click: addData2}, clickBubble: false">「ねぎま」を追加</button>
  63. </div>
  64. <input type="text" /><br />
  65. <div style="font-size:10pt;text-align:right;margin-top:0.5em;">
  66. <a href="//tips.recatnap.info/" target="_top">PCスキルの小技・忘却防止メモ</a> -
  67. <a href="//tips.recatnap.info/wiki/" target="_top">PCスキルの小技・忘却防止メモのまとめ(wiki)</a>
  68. </div>
  69. <div style="font-size:10pt;text-align:center;margin-top:0.5em;padding:0.5em;border-top:1px solid #ccc;">
  70. Copyright &copy; 2009 by PCスキルの小技・忘却防止メモ. All rights reserved.
  71. </div>
  72. </body>
  73. </html>