2013-03-20 8 views
0

J'essaie d'obtenir l'action lorsque vous cliquez et survolez (marge-gauche + bordure-bas) le .hover c'est bien ... mais mon .click ne fonctionne pas, j'ai essayé ceci:.click ne fonctionne pas

$(".border").hover(
    function(){ 
     $(this).switchClass("border", "border_active", 500); 
     return false; 
    } 
    ,function(){ 
     $(this).switchClass("border_active", "border", 400); 
     return false; 
    } 
); 
$(".border").click(
    function(){ 
     $(this).removeClass('border'); 
     $(this).addClass('border_active') 
    } 
    ,function(){ 
     $(this).removeClass('border_active'); 
     $(this).addClass('border'); 
    } 
); 

mais rien, voici le code du trou: http://jsfiddle.net/Fe6pE/13/, s'il vous plaît me montrer la meilleure façon d'obtenir ce travail, Merci

+0

Vous utilisez '.border' comme sélecteur pour' .click', mais vous supprimez '.border' de la fonction. Je crois qu'après avoir supprimé '.border', il n'est plus lié à votre fonction de clic. – Axel

+0

Pourquoi avez-vous besoin de deux fonctions distinctes à l'intérieur du clic? pourquoi ne pas faire toggleclass? –

Répondre

2

Pour ce faire, il suffit d'utiliser toggleClass;

$('.border').click(function() { 
    $(this).toggleClass('border-active border'); 
}); 

Cela va simplement alterner les classes. Si border-active est allumé pour commencer, puis en cliquant dessus, le border-active sera désactivé et le border sera activé.

+1

'$ (this) .toggleClass ('border-active border')' –

+0

+1 exactement ce que j'ai répondu (maintenant supprimé pour voter à la place) – ManseUK

+0

@JanDvorak merci. Changé –

0

en jQuery, click() ne prend pas en 2 arguments de la fonction.

Ce que vous devez utiliser est au contraire mousedown() et mouseup()

Ou mieux encore, vous pouvez éviter JavaScript et structurer votre CSS comme:

.border { 
    /* normal styles */ 
} 
.border:hover { 
    /* styles when hovered */ 
} 
.border:active { 
    /* styles when mouse is down */ 
} 
+1

Il s'agit d'une version dépréciée de 'click' avec plusieurs arguments. Il alterne entre les gestionnaires. Ce n'est pas un alias de 'mousedown'' mouseup' –

+0

Correction: la version multi-gestionnaire s'appelait 'toggle', pas' click'. –

0

Comme je l'ai mentionné dans les commentaires, il suffit d'ajouter toggleClass?

$(".border").click(function(){ 
    $(this).toggleClass('border'); 
    $(this).toggleClass('border_active'); 
}); 
+3

pourquoi ne pas remettre en cause la réponse existante au lieu d'ajouter des doublons? – ManseUK