2010-09-16 3 views
1

Je veux alerter quelque chose si la souris de l'utilisateur a laissé DEUX éléments html (un champ de texte ainsi qu'un bloc d'étendue). Comment puis-je dire la ET dans jquery, en vain j'ai essayé quelque chose comme ceci:Comment dites-vous cela dans jQuery?

if ($('textarea.commentField') && $('span.loginPrompt')).mouseout(function() { 
    alert('something'); 
}); 
+1

Juste un point sur la syntaxe JavaScript - cet extrait fait à aucun sens, comme vous avez pu le constater de la façon dont il ne fonctionne pas . Il se traduirait par 'if $ (' textarea.commentField ') et aussi $ (' span.loginPrompt ') évaluer en booléen vrai, oh attend, nous essayons d'exécuter une méthode sur la condition if ... qui est un booléen, et n'a pas de méthodes, mais aha, Javascript attend un {ou une seule déclaration ici ... QUOI? Oh, erreur de syntaxe '. –

+1

Je suggère de décrire la fonctionnalité réelle que vous voulez plutôt que la façon dont vous essayez de l'implémenter. Si vous décrivez la fonctionnalité, il est probable que nous serons en mesure de vous proposer une meilleure solution que de simplement vous donner un moyen d'implémenter un ** ET ** entre deux événements dans jQuery. – tvanfosson

+0

Je dirais que vous devez donner une balise html ... il doit y avoir une meilleure façon de le faire et cela dépend de votre code html. – Reigel

Répondre

1

Cela pourrait aider:

$('textarea.commentField, span.loginPrompt').mouseout(function() { 
    alert('something'); 
}); 
+0

Cela voudrait dire que si elle laisse l'un ou l'autre, cela l'alerterait. Donc vous en auriez probablement deux. –

+0

Ceci ne l'attachera qu'à une zone de texte avec la classe commentField à l'intérieur d'une plage avec la classe loginPrompt. –

+0

En fait, cela ne ferait pas grand-chose, puisque span.loginPrompt est utilisé comme "contexte" pour le sélecteur. la virgule doit être dans les guillemets simples. – Marko

3

Si la durée entoure le champ de texte, vous aurez seulement besoin du gestionnaire sur la durée.

Si vous souhaitez joindre le même gestionnaire à deux éléments indépendants, utilisez ceci:

$('textarea.commentField, span.loginPrompt').mouseout(...) 
7

Vous ne pouvez pas faire nativement, car cela nécessitera un certain travail sur le terrain.

Quelque chose comme ça fonctionnerait, mais il doit y avoir une meilleure solution:

var state = {a:false,b:false}; 
$('.a').mouseenter(enterA); 
$('.a').mouseout(exitA); 
$('.b').mouseenter(enterB); 
$('.b').mouseout(exitB); 

function enterA(){ state.a = true } 
function exitA(){ state.a = false } 
function enterB(){ state.b = true } 
function exitB(){ state.b = false } 

Et puis si vous avez jQuery 1.4.2, vous pouvez lier plusieurs événements, il faut donc ajouter ces après les premiers événements.

$('.a,.b').mouseout(function(){ 
//we're outside of both blocks 
if(!state.a && !state.b) 
{ 
    //do something 
} 
}); 

Ceci se déclenchera lorsque vous avez quitté A ou B, et vous êtes également en dehors de l'autre. Je pense que c'est ce que vous vouliez dire.

+1

c'est la seule bonne réponse, +1 –

+3

Il doit y avoir un meilleur moyen, cependant. La sanité dicte tel: P. –

+0

Si un élément est dans l'autre dans votre balisage, seul l'élément parent a besoin de l'événement. Si vous attacherez un mouseenter, vous devrez l'attacher à l'enfant. –

1

bâtiment sur les autres réponses, vous pouvez essayer

(function() { 
    var inc = 0; 
    var both = false; 
    $('textarea.commentField, span.loginPrompt') 
    .mouseover(function() { 
     inc++; 
     if(inc==2) { both = true; } 
    }) 
    .mouseout(function() { 
     inc--; 
     if(inc == 0 && both) { 
     both = false; 
     // do whatever else you wanted here 
    }); 
})(); 

Cela diffère en fonction de l'autre réponse basée sur l'état, en ce que le bit do whatever sera déclenchée que lorsque la souris a été à l'intérieur à la fois la textarea et le span simultanément. Le both var suit si, à tout moment, les deux éléments ont eu la souris entrer sans quitter non plus.

Il est enveloppé dans une fonction de sorte que les vars de l'Etat ne pollue l'espace de noms extérieur