2010-11-05 5 views
0
$('.field').blur(function() 
    $('*').not('.adress').click(function(e) { 
       foo = $(this).data('events').click; 
       if(foo.length <= 1) { 
    //    $(this').next('.spacer').children().removeClass("visible"); 
       } 
       $(this).unbind(e); 
     }); 
}); 

J'essaie de supprimer une classe « visible, chaque fois que je suis bluring un champ classé .field, à moins que si je clique sur un élément avec le .adress de classe.jquery question traversal arbre

Le champ flou et adresse-clic fonctionne comme il se doit (je l'ai fatigué avec alerte) mais pas la suppression de classe, est-ce que quelqu'un sait pourquoi?

La suppression des travaux de classe si la fonction not ("adresse") est enlevé! Comme ceci:

$('.field').blur(function() { 
    (this).next('.spacer').children().removeClass("visible"); 
}); 
+0

Pour être clair, avez-vous l'intention de détecter si je laisse un '.field' *** en cliquant sur *** a' .adress'? C'est ce que cela donne à partir de votre question, mais votre code attache en fait un gestionnaire '.click()' au moment du flou, donc deux événements de clic distincts devront être impliqués. – VoteyDisciple

+0

Je veux détecter si j'ai quitté un champ sauf * en cliquant sur * a. Adresse – Himmators

+0

leac = clic !!!! – Himmators

Répondre

0

J'essaie de supprimer une classe « visible, chaque fois que je suis bluring un champ classé .field, à moins que si je clique sur un élément avec le

.adress classe.

Ceci est assez délicat Ce que votre code actuel fait, c'est qu'il lie un gestionnaire d'événements click chaque fois que vous flouez un élément avec la classe field. de faire cela est d'écouter focus événements et connectez-vous quel élément a reçu l'accent, takin g Action sur l'élément précédemment actif si vous le souhaitez:

$(document).ready(function(){ 
    var curFocus; 

    $(document.body).delegate('*','focus', function(){ 
     if ((this != curFocus) && // don't bother if this was the previous active element     
      ($(curFocus).is('.field')) && // if it was a .field that was blurred 
      ($(this).is('.adress')) // the newly focused field is an .adress 
     ) { 
      $(curFocus).next('.spacer').children().removeClass("visible"); // take action based on the blurred element 
     } 

     curFocus = this; // log the newly focussed element for the next event 
    }); 
}); 

Ceci a probablement de très mauvaises performances. Si vous n'êtes pas inquiet de la compatibilité entre navigateurs, en particulier pour les anciennes versions, document.activeElement peut vous intéresser.

+0

cool, je ', essayant de savoir quels navigateurs soutiennent l'élément actif, nous voulons soutenir IE7 + (et chrome safari firefox, mais ils battent généralement IE) Savez-vous quels navigateurs supportent activeElement? – Himmators

+0

Une petite recherche a montré que 'activeElement' ne fera rien pour vous ici, car il est défini * après que' 'blur' soit appelé. FWIW, IE est le support le plus fiable de celui-ci, car il était à l'origine une caractéristique propriétaire d'IE, adoptée par HTML5. La méthode ci-dessus est probablement la meilleure que vous aurez. – lonesomeday

+0

D'accord, je vais passer du temps à le comprendre! merci beaucoup! – Himmators

0

vous avez une citation supplémentaire après //$(this. vous n'avez pas besoin de citer la variable this.

En outre, votre sélecteur * peut être simplifié pour $(':not(.address)')

Pouvez-vous donner un exemple de votre HTML?

+0

échantillon: http://dev.resihop.nu/addtrip?from=&to=&when=&name=&email=&phone=&details=&posted=&got_car=1 – Himmators