7
votes

Forcer la mise au point sur un élément avec une exception. (jQuery)

J'ai deux champs de saisie. Je veux forcer la mise au point sur #area, peu importe où l'utilisateur clique sur sauf si il est sur #Input. J'ai essayé quelque chose comme ça, mais puisque l'entrée fait partie du document, cela ne fonctionne pas. XXX

Pensées?


0 commentaires

3 Réponses :


13
votes

Changez-le à

$("#area").focus();
$(document).click(function() { $("#area").focus() });
$("#input").click(function(e) { e.stopPropagation(); $("#input").focus() });


1 commentaires

$ (document) .Cliquez sur (Fonction () {$ (zone # (zone #). Focus ()}; devrait être $ (document) .Cliquez sur (Fonction () {$ (zone #). Focus ()}) ;



1
votes

Vous devez annuler le bouillonnement d'événement lorsque vous cliquez sur les entrées normales, soit en retournant false dans votre gestionnaire d'événement, soit en appelant e.stoppropagation () . .

Je ne sais pas si l'ordre dans lequel vous affectez des manipulateurs d'événements, mais vous pouvez essayer de mettre d'abord le #input d'abord.


0 commentaires

2
votes

La solution stoppropogation est plus simple que ce que je suis sur le point de suggérer, mais il vaut probablement la peine d'être discuté de cette autre option. Dans cette première fonction que vous avez, vous pouvez essayer de prendre le premier argument à la fonction, qui est un objet d'événement normalisé JQuery: xxx

et le tester pour voir si la cible La propriété de l'événement est votre entrée: xxx


2 commentaires

+1, l'avantage supplémentaire de ceci est que vous n'avez besoin que d'une seule fonction pour gérer les deux cas .. L'inconvénient supplémentaire est que pour IE, vous devez tester contre Event.srelement qui ajoute la complexité ..


Méfiez-vous que événement est un mot clé réservé dans IE et donnera une erreur lorsque vous l'utilisez comme une variable. En outre, le chèque que vous avez fourni peut être écrit plus simple (et plus court) comme si ($.target) .is ('# entrée'))