2010-07-30 6 views
3

hey, Im essayant de faire un appel d'une fonction de jquery et passer quelques args avec elle sous la forme d'passant args lorsque vous appelez la fonction jquery

$('#button').mouseenter(exampleFunction(arg1,arg2)); 

function exampleFunction(arg1,arg2) 

La fonction fonctionne très bien sans args écrit comme ça. Mais dès que j'ajoute() pour mettre des args dans la fonction, je cesse de travailler.

comme ceci:

$('#button').mouseenter(exampleFunction()); 

Il semble que ceci est une sorte d'erreur de syntaxe jquery de ma part

est ici le code réel

<script type="text/javascript"> 

$(document).ready(function() { 
$('.section').mouseover(function(){ 
    $('#nav2').fadeOut(0).animate({"height":"30px"}, 250); 

     }); 


$('#section1').hover(navSelect); 

function navSelect(){ 
    if ($('.interior').is(':hidden')){ 
    $('.subSection').fadeOut(250); 
    $('.interior').delay(250).fadeIn(250); 
    $('#selector').animate({"left":"0px"},250); 
    }} 


$('#section2').mouseenter(function(){ 
    if ($('.exterior').is(':hidden')){ 

    $('.subSection').fadeOut(250); 
    $('.exterior').delay(250).fadeIn(250); 
    $('#selector').animate({"left":"100px"},250); 
    } 
}); 
$('#section3').mouseenter(function(){ 
    if ($('.view').is(':hidden')){ 

    $('.subSection').fadeOut(250); 
    $('.view').delay(250).fadeIn(250); 
    $('#selector').animate({"left":"200px"},250); 
    } 
}); 


     }); 
</script> 
+0

Une question similaire: http: // stackoverflow.com/questions/939032/jquery-pass-more-parameters-in-callback –

Répondre

0

La fonction que vous liez à un événement dans jQuery reçoit l'objet 'événement' de l'appel de la méthode par jQuery.

jQuery("#button").mouseenter(function(evt){[ do something ]});

si vous voulez faire quelque chose comme

$('#button').mouseenter(exampleFunction(arg1,arg2));

afin de créer des modèles à une fonction que vous voulez avoir lié à l'événement, vous pouvez construire une fonction comme ceci:

function exampleFunction(arg1, arg2){
        return function(evt){
            jQuery(this).animate({width: arg1, height: arg2},250)
        };
}};

ayant le retour de la fonction est lié à (et donc, passé l'objet d'événement), et se lient alors à des éléments comme

jQuery("#button").mouseenter(exampleFunction("50%","50%"))
        .mouseleave(exampleFunction("100%","100%");

+0

Merci! ça marche parfaitement, je ne comprends pas vraiment pourquoi ça marche mais ça l'est, quelqu'un voudrait-il m'expliquer? –

1

la différence entre Funktion et Funktion () est l'un est un pointeur sur une fonction et l'autre est le résultat de l'exécution de la fonction.

essayer

mouseenter(function(a,b){....}) 

là, vous définissez la fonction et de la transmettre. La fonction définie prend 2 args, a et b.

+0

Ce que j'essaie de faire est de créer une fonction jquery, qui fait des animations différentes selon les args qui lui sont passés. Fondamentalement, les args indiquaient à l'animation quels éléments devaient se fondre ou disparaître, ou où positionner un élément. Donc, fondamentalement, j'espère faire une fonction globale qui peut faire beaucoup de choses en fonction de ce que ça donne. –

+0

@James, vous ne voulez pas une fonction maître. Pourquoi ne pas avoir juste un tas de fonctions, et appeler chacun au moment opportun? – hvgotcodes

+0

Je cherchais à ajouter ce plugin à ma page, et j'ai remarqué la façon dont il déclenchait les animations, et j'ai pensé que je pourrais développer cela en ajoutant des arguments et en en faisant une fonction principale. Je vais prendre vos conseils et m'en tenir à des fonctions séparées, mais est-il possible de le faire avec une fonction maître? http://cherne.net/brian/resources/jquery.hoverIntent.html –

5

Les fonctions en JavaScript sont des objets de première classe. Vous pouvez les mettre dans des variables, les renvoyer d'autres fonctions, etc. Lorsque vous écrivez $('#button').mouseenter(exampleFunction(arg1,arg2));, vous dites "Exécutez exampleFunction avec ces arguments, et utilisez sa valeur de retour comme rappel".

Pour obtenir jQuery pour appeler la fonction avec ces arguments plus tard, vous pouvez utiliser une fonction en ligne anonyme:

$('#button').mouseenter(function() { 
    exampleFunction(arg1,arg2) 
}); 

Votre fonction sans argument sera appelé, et passer les bons arguments à la fonction que vous avez réellement vouloir appeler. C'est une sorte de pauvre homme closure.

+0

Je viens de penser à ce sujet pour un copuple minutes et il a juste soufflé mon esprit, cool –

Questions connexes