2016-08-02 6 views
0

I jQueryUI Register aufweisen, und auf einer bestimmten Registerkarte Ich habe eine Klick-Funktion (die Ajax-Aufruf funktioniert korrekt) definiert:Fokus Capturing auf einem bestimmten jQueryUI Registerkarte

$("a[href='#tabs-1ua']").click(function (event, ui) 
{ 

    //ajax call 

}); 

Nun, was ich zu tun versuchen, ist um nicht nur Klicks, sondern jede Art von Fokus auf dieser Registerkarte im Allgemeinen zu berücksichtigen, wie zum Beispiel mit einer Tastaturpfeiltaste zu dieser zu navigieren. Ich habe versucht activate anstelle von click, aber ich habe einen Fehler. Wie kann ich alle Arten von Fokus auf einer bestimmten Registerkarte jQueryUI erfassen?

Vielen Dank.

Antwort

0

Ich habe es funktioniert wie folgt:

I initialisiert Tabs in meiner Anwendung mit dem Klassenattribut anstelle einer ID, und in ihm ist spezifizierte die activate Wahl. Dort habe ich die ID des derzeit aktiven Tabs mit $(".tabui .ui-tabs-panel:visible").attr("id");, wobei tabui der Name der Klasse ist. Der Code ist unten.

$('.tabui').tabs({ 

    activate: function (event, ui) 
    { 

     //do something 1 

     var currentTab = $(".tabui .ui-tabs-panel:visible").attr("id"); 

     console.log (currentTab); 

     if(currentTab === "#tabs-1ua") 
     { 
      //do something 2 
     } 


    } 
}); 

Vielen Dank an alle, die versucht haben, mir zu helfen.

0

Versuchen

$("a[href='#tabs-1ua']").on('click hover', function() { 
// Do something for both 
}); 
+0

Ich habe gerade versucht es, und es gab keinen Unterschied im Verhalten mit 'click' – ITWorker

+0

@ITWorker ich neue way.Check hinzugefügt, wenn das für Sie –

+0

funktioniert Ich habe versucht, und sah immer noch das gleiche Verhalten wie' – ITWorker

0

focus() standardmäßig von Eingabeelementen akzeptiert wird (<input>, <textarea>, <select>) und nicht <a> Elemente. Versuchen Sie, zuerst einen Tab-Index zum Anker hinzuzufügen:

+0

Dies hat das selbe Verhalten wie der Klick, es hat nicht erfasst, wie man mit der Tastatur zur Registerkarte navigiert. – ITWorker

1

Sie sollten "tabsactivate" Listener setzen, während die Registerkarte aktiviert wurde. Bitte überprüfen Sie den folgenden Code.

// Tabs ist die ID von UL, in die alle Tabs eingepackt wurden. Bitte ersetzen Sie es mit Ihrem Code.

$('#tabs').tabs({ 
    activate: function(event ,ui){ 
     if(ui.newTab.attr('href')=='#tabs-1ua'){ 
      //make ajax call 
     } 
}); 
+0

Dies funktionierte nicht für Tastaturnavigationsfokus oder Mausklickfokus. – ITWorker

+0

@ITWorker können Sie bitte mit aktualisierter Antwort versuchen. –

+0

@ITWorker Sie arbeiten mit welcher Version von jquery ui? –

0

Sie müssen die focus Ereignis für Schlüssel Bewegung verwenden, und es für Mausklicks auch nutzen können. Das Ereignis focus und ähnliche Ereignisse sind in ihrem Verhalten notorisch eigenartig, insbesondere im Hinblick darauf, wie sie in Frameworks und Plugins implementiert sind. Obwohl ich nicht genau sagen kann, warum, focus auf dem a Element auf einen Mausklick ausgelöst wird, und focus auf dem umschließenden li Element wird ausgelöst, wenn Sie zu dem Element mit Schlüsseln navigieren. (Getestet mit Chrome.) Also:

$("#myTabs").tabs(); 
$('#myTabs li, #myTabs a').on('focus', function(e, ui){ 
    //do whatever 
}); 

Demo

+0

Wie kann ich das nur für eine bestimmte Registerkarte tun? Der, auf den sich '' a [href = '# tabs-1ua'] "' – ITWorker

+1

bezieht. Sie könnten dem übergeordneten li-Element einfach eine ID geben und auf die ID verweisen. Klingt so, als müssten Sie sich [CSS-Selektoren] (https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_started/Selectors) genauer ansehen, oder Sie können jQuery genauer verstehen CSS-Selektoren, um zu bestimmen, was Sie tun möchten. Der Selektor in meinem Beispiel bezieht sich auf "irgendein" li "-Element innerhalb des Elements mit der ID" myTabs ", ODER ein beliebiges" a "-Element innerhalb der ID" myTabs ". Wenn du es von dort nicht herausfinden kannst, poste zurück. – BobRodes

+0

Ich sehe das jetzt. Danke für die Hilfe. – ITWorker

Verwandte Themen