bootstrap popover添加esc keypress检查并关闭

时间:2012-04-04 00:39:33

标签: jquery closures twitter-bootstrap popover

我正在尝试将bootstrap popover扩展为在手动模式下关闭。我正在尝试扩展popti类inherts的工具提示类,如下所示:

/* WHY CANT I CALL the HIDE FUNCTION WHEN ESC key press is intercepted????

   Why is the hide class undefined when the keypress is intercetped?
*/

!function ($) {

    "use strict"

    /* TOOLTIP PUBLIC CLASS DEFINITION
    * =============================== */

    var Tooltip = function (element, options) {
        this.init('tooltip', element, options)
    }

    Tooltip.prototype = {

        constructor: Tooltip

  , init: function (type, element, options) {
      //init logic here

      $(document).keypress(function (e) {
          if (e.which == 27) { this.hide };  
      });                    ^^^^^^^^^^^^^
                             this.hide is undefined on debug????
  }

  , hide: function () {
     //hide logic
  }
}

1 个答案:

答案 0 :(得分:4)

你需要使用它:

$tooltip = this;
$(document).keydown(function(e){
   if (e.keyCode === 27)
      $tooltip.hide();
});

你的问题是你想要的“这个”实际上是文件,它没有隐藏功能。当触发keypress / keydown事件时,函数内的“this”是事件被触发的元素,因此文档。记住JavaScript具有函数范围,这意味着当你在许多不同的函数中时,你需要对你的“this”变量保持谨慎。