2016-05-09 4 views
7

J'ai un champ de texte où les utilisateurs peuvent taper des données. Ils peuvent utiliser la touche de tabulation, puis le champ est mis en retrait. Cela fonctionne très bien sur tout sauf ios avec un clavier Bluetooth.Javascript - Détection des touches de l'onglet iPad avec clavier Bluetooth

Si je visite http://www.rapidtables.com/tools/notepad.htm, je peux tab sur mon ordinateur de bureau/ordinateur portable. Mais sur mon iPad ... pas de dés.

Si je visite https://api.jquery.com/keydown/, https://api.jquery.com/keyup/, https://api.jquery.com/keypress/ ... AUCUN d'entre eux ne détecte la touche de tabulation sur l'iPad.

La touche de tabulation fonctionne dans les applications natives ios, comme Notes, et la touche de tabulation permet de naviguer entre les champs d'une page Web. Y at-il un moyen de détecter la clé de tabulation en Javascript que tout le monde connaît?

EDIT

est ici un violon j'ai jeté ensemble afin que vous puissiez voir le code et problème en action: https://jsfiddle.net/9jv0bmbx/1/ Fondamentalement, je suis en train de vérifier que e.keyCode===9 qui fonctionne sur le bureau/ordinateurs portables. Sur les iPads, il enregistre CHAQUE clé à l'exception de la touche de tabulation.

+0

Donc, si vous vous connectez à l'aide de la touche lorsque l'on appuie sur l'onglet sur les périphériques en cause, ne se connecte-t-il pas? Si ce n'est pas le cas, il se peut que l'onglet sorte du champ sans réellement déclencher une pression sur le champ. Essayez de créer un enregistreur de frappe global et voyez si vous pouvez enregistrer un onglet. Ce qui suit devrait le faire. $ (document) .keydown (fonction (e) { \t \t \t console.log (e.keyCode);}); – RayfenWindspear

+0

J'ai ajouté cela au violon. Toujours rien. Mais la touche de tabulation dans le premier champ déplace toujours le focus sur le deuxième champ. La clé de tabulation est donc enregistrée par l'application (navigateur) pour gérer les événements de mise au point, mais pas en tant qu'événement de clavier que je devine.J'ai essayé le chrome et le safari, même résultat. –

+0

J'ai eu les mains sur un ... ma suggestion n'a pas fonctionné. Pardon. – RayfenWindspear

Répondre

1

EDIT2:

Voici une autre option pour une solution. J'ai trouvé un article qui explique comment capturer TOUS les événements. Voici un jsfiddle, et voici le article J'ai trouvé ce concept. Notez que dans le jsfiddle je retourne le addEventListener d'origine parce que ce dont vous avez besoin a été fait après avoir ajouté un écouteur vide.

jsfiddle

var oldAddEventListener = EventTarget.prototype.addEventListener; 

EventTarget.prototype.addEventListener = function(eventName, eventHandler) 
{ 
    oldAddEventListener.call(this, eventName, function(event) { 
     if(event.target.id === "textarea" && event.keyCode===9){ 
     event.preventDefault(); 
     $(this).val($(this).val()+"\t"); 
     $("#log").append("<li>Tab Pressed</li>"); 
     } 
    eventHandler(event); 
    }); 
}; 
$("#textarea").keydown(function(e) { 

}); 

EventTarget.prototype.addEventListener = oldAddEventListener; 

EDIT:

Le clavier de test capture ici l'onglet keydown. Regardez dans cette bibliothèque, il devrait résoudre vos problèmes. Utilisez directement la bibliothèque ou découvrez comment elle capture l'onglet sur iOS en explorant le code. http://dmauro.github.io/Keypress/

Il existe une sorte de problème de clé matérielle/de fonction qui entrave la pression d'une touche de tabulation normale. Appuyer sur OPTION + Tab lancera votre gestionnaire comme d'habitude. Il existe peut-être une sorte de paramètre à l'origine de cette situation, mais il est évident que vous ne pouvez pas attendre de vos utilisateurs qu'ils modifient leurs paramètres pour utiliser votre application. Vous pouvez peut-être trouver un moyen de tirer parti de cette façon, mais il semble que c'est le comportement par défaut et vous êtes coincé avec elle.

Il est peut-être possible de détecter des périphériques iOS et de déterminer une sorte de substitution pour le comportement par défaut de l'onglet. Ou vous pouvez être en mesure de capturer le focusOut, ou flouter des événements et de détecter si elle n'a pas été causée par la souris.

+0

J'ai un autre montage à faire avec une solution, mais je dois attendre que le mec avec l'iPad revienne du déjeuner pour le débloquer XD. – RayfenWindspear

+0

Je viens de mettre en place http://jsfiddle.net/gqxgax76/ pour voir si je pouvais utiliser Keypress. Ce que j'ai découvert, c'est que lorsque le document/la fenêtre a le focus et qu'aucun élément ne le fait, alors la touche de tabulation est reconnue. Dès que vous vous concentrez sur un input/textarea, l'onglet ne fonctionne plus. Je vais voir si je peux obtenir le deuxième exemple à travailler. –

+0

Que jsfiddle ne montre pas d'onglets de ma part. OPT + Tab fonctionne quand même. – RayfenWindspear