2016-08-08 31 views
0

ich ein jQueryUI Menü mit id leftmenu und auf seiner Liste Elementen definiert habe, habe ich einen Artikel auf Klick eine Funktion wie folgt definiert:Fokus Fangen auf einem jQueryUI Menüpunkt mit einem Hörer breiter als ein Klick Zuhörer

$('#leftmenu>li').click(function() { 
    var clickedId = this.id; 
    $.ajax({ 
     type: "POST", 
     cache: false, 
     url: "/Session/Index/", 
     success: function (result) { 
      if (result.length > 0) 
      { 

       performListItemAction(clickedId); 
      } 
      else 
      { 

       window.location.href = '/Home/Index/' 
      } 
     } 
    }); 
}); 

Dies funktioniert gut, aber jetzt möchte ich es ändern, so dass anstelle der click auf den Menüpunkt, möchte ich Fokus und Auswahl auf dieses Element auf eine allgemeinere Weise, wie die Tastatur zu erfassen. Zurzeit kann ich mit den Auf- und Ab-Tasten auf der Tastatur durch das Menü navigieren, aber der innere Code wird nicht aufgerufen. Ich weiß, das ist, weil es nur auf click passieren soll, aber das gleiche Ding glücklich, als ich versuchte activate und focus anstelle der click auch.

Wie kann ich erreichen, dass es das gleiche Verhalten wie click auf eine allgemeinere Art und Weise ausführt, die die Auswahl und Eingabe des Menüelements erfasst?

Vielen Dank.

+0

haben Sie ein Ereignis Versuchen Sie, für 'keydown()' und prüfen, ob die Enter-Taste gedrückt wurde .. –

+0

@Pamblam ich gerade versucht, '$ ('# leftmenu> li'). keydown (funktion (e) { if (e.keyCode == 13) { warnung ('drücken sie geben^^ ^'); } ...' and es hat nicht funktioniert – ITWorker

+0

verwenden '$ (Dokument) .on (" keydown ", functi on() {}) 'und überprüfen Sie' document.activeelement', um zu sehen, ob es einer der Menüpunkte ist –

Antwort

1

Dies sollte im select Ereignis durchgeführt werden. Auf diese Weise fängt es sowohl click oder select von fokussierten Tastaturaktionen ab.

Beispiel: https://jsfiddle.net/Twisty/v671x6ns/

jQuery

$(function() { 
    $('#leftmenu').menu({ 
    select: function(e, ui) { 
     var selectId = ui.item.attr("id"); 
     $.ajax({ 
     type: "POST", 
     cache: false, 
     url: "/Session/Index/", 
     success: function(result) { 
      if (result.length > 0) { 
      performListItemAction(selectId); 
      } else { 
      window.location.href = '/Home/Index/' 
      } 
     } 
     }); 
     console.log(e.type + " event, ID: " + selectId); 
    } 
    }); 
}); 
+0

Dies funktioniert fast 100%. Wenn ich bei einem bereits ausgewählten Menüeintrag die Eingabetaste drücke, wird ein Fehler angezeigt: "Eigenschaft kann nicht abgerufen werden" ist "von undefinierter oder Nullreferenz", aber ansonsten funktioniert es gut. – ITWorker

+0

Das ist komisch. Denke nicht, dass irgendetwas in meinem Code das tut. Welche anderen Optionen verwenden Sie für das Menü? Welche anderen Skripts werden neben diesem Code ausgeführt? – Twisty

+0

'Select' ist die einzige Option, die ich verwende. Ich führe ein Skript 'performListItemAction', das unter anderem die Hintergrundfarbe des ausgewählten Menüpunktes in eine bestimmte Farbe ändert. Dieses Problem tritt auch nicht bei Mausklicks auf bereits ausgewählte Elemente auf, nur die Tastatureingabe. – ITWorker