2012-04-04 11 views
2

Ich versuche Bootstrap Popover zu verlängern, um auf Escape im manuellen Modus zu schließen. Ich versuche, die Tooltip-Klasse, die die popover Klasse inherts wie die unten zu erweitern:bootstrap popover hinzufügen esc keypress überprüfen und schließen

/* 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 
    } 
} 

Antwort

4

Sie diese verwenden müssen: ist

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

Ihr Problem, dass die „this“ Sie wollen, ist eigentlich die Dokument und es hat keine Versteckfunktion. Wenn das keypress/keydown-Ereignis ausgelöst wird, ist das "this" innerhalb der Funktion das Element, auf das das Ereignis deshalb im Dokument ausgelöst wurde. Denken Sie daran, dass JavaScript einen Funktionsumfang hat, was bedeutet, dass Sie bei vielen verschiedenen Funktionen auf Ihre "diese" Variablen achten müssen.

Verwandte Themen