2010-11-26 44 views
6

Puis-je transmettre une variable dans hover()?jquery: passer des variables dans la fonction hover()?

Comme dans le script ci-dessous, je ne veux pas déclarer la même variable deux fois var target = xxx et je ne veux pas faire cette variable un target = xxx global bcos je autre fonction en utilisant ce nom de variable - cible.

$('.image-profile').hover(function() { 

     var target = $('.button-change-image-profile',this); 
     target.show(); 

    },function() { 

     //var target = $('.button-change-image-profile',this); 
     target.hide(); 

    }); 

J'ai donc essayé de passer le var comme celui-ci },function (target) {, bien sûr, il est faux, mais toute autre méthode pour passer cette variable?

merci.

+0

quelle est l'utilité de passer l'argument aux événements type de fonction, ce que vous voulez sera disponible à travers les événements ou cela ... – kobe

Répondre

6

La version courte est juste pour basculer ici:

$('.image-profile').hover(function() { 
    $('.button-change-image-profile',this).toggle(); 
}); 

Pour qu'il soit disponible dans chaque gestionnaire (comme une solution plus générale) définir l'extérieur lors de la boucle (en utilisant par exemple .each()), comme ceci:

$('.image-profile').each(function() { 
    var target = $('.button-change-image-profile',this); 
    $(this).hover(function() { 
     target.show(); 
    },function() { 
     target.hide(); 
    }); 
}); 
+0

merci beaucoup! pourquoi n'ai-je pas pensé à ça? merci pour l'aide :-) – laukok

+0

Merci pour la réponse générale! M'a aidé. – Jeff

1

Il suffit de définir la fonction var hors survol.

+0

dans javaScript chaque variable définie hors fonction est une sorte de global. – slobodan

+3

Je ne sais pas qui vous l'a dit, mais ce n'est pas correct. –

+0

Ceci est une très mauvaise façon de "résoudre" le problème, et en fait cela causerait des problèmes ici, car il y a probablement beaucoup d'éléments '.image-profile'. –

1

Je pense que jQuery bind pourrait être ce que vous voulez.

7

Une autre approche possible: enregistrer les données dans le this du survol/sortant en utilisant jQuery .data(). Vous l'enregistrez sur la souris, vous le récupérez à la souris. Cela peut être conceptuellement similaire à utiliser un var global ou une var de fonction vol stationnaire, donc, t peut créer des ordures ...

$('.image-profile').hover(function() { 

    var target = $('.button-change-image-profile',this); 
    target.show(); 

    // we save the target object into the 'target' key. 
    $(this).data('target',target); 

},function() { 

    // we retrieve the target object (a jQuery object) and then hide it. 
    $(this).data('target').hide(); 

}); 

Il faut espérer que cette approche est pas trop mal ...

+0

cela a résolu le problème pour moi, merci beaucoup! – Saturnix

+0

A travaillé pour moi soit :) – Heihachi