2010-09-03 7 views
0

S'il vous plaît me dire quel est le problème dans ce script:fonction très simple, mais ne fonctionne pas

$("#mydiv").click(function() 
    { 
     console.log("something"); 
    }, function() 
    { 
     console.log("something"); 
    }); 

Il ne fait pas console seconde.

Merci

+0

Je suppose que vous voulez faire ces deux fonctions en même temps, non? – XstreamINsanity

+0

si je veux les deux, je vais écrire '{function1() {...}; function2() {...}}' ... j'essaie de comprendre ce que je dois écrire, pour faire fonctionner une par un? ie (je m'attends à ce que function2 fonctionne après function1, pas même temps ...) – Simon

+0

voir la solution de bigrockshow pour le cas de dépendance de la séquence d'exécution qui fonctionne parce que javascript est mono-thread. Si vous souhaitez avoir ces fonctions privées à l'événement, cela peut être fait aussi avec javascript événement correctement construit. –

Répondre

4

click ne prend une fonction. Qu'attendez-vous de la deuxième fonction?

Pour que la deuxième fonction s'exécute après la première fonction, placez-la à la fin de la première fonction. Si la première fonction fait quelque chose de manière asynchrone, alors vous devrez attacher votre deuxième fonction comme rappel au résultat du premier.

$('#mydiv').click(function() { 
    console.log('first something'); 
    console.log('second something'); 
}); 

ou peut-être comme:

$('#mydiv').click(function() { 
    $(this).fadeOut(function() { 
     console.log('second something'); 
    }); 
}); 
+0

J'ai besoin de la fonction deux pour fonctionner après la fonction1, pas en même temps, est-ce possible? (Ie si dans la fonction1 j'ai quelque chose qui prend 500ms, j'ai besoin de la fonction deux pour courir 500ms, mais sans utiliser 'setTimeout' ... – Simon

1

Je ne pense pas que vous pouvez lier deux fonctions sur un événement comme celui-ci. À moins qu'il ne soit conçu pour cela, comme le vol stationnaire par exemple.

+0

et ce que fait .hover lie deux deux autres événements aux deux fonctions. –

+0

Exactement, c'est juste un raccourci. – PJP

0

Il n'y a rien ici pour exécuter la deuxième fonction anonyme (sans nom).

EDIT: Si ce que vous voulez est de lier les deux actions d'un « clic » vous pouvez lier les fonctions de .mousedown et .mouseup au lieu du .cliquez singlular

EDIT2: D'après les commentaires, produire un privé , la séquence de fonctions d'exécution:

$('#mybutton').click(function(){ 
    var one = function(){ 
     alert('one'); 
    }; 
    var two= function(){ 
     alert('two'); 
    }; 
    one(); 
    two(); 
}); 

Pour le voir en visite d'action: http://jsfiddle.net/R7aT3/

1

Comme mentionné ci-dessus click prend qu'un seul gestionnaire à la fois. Je suppose que vous devez appeler deux fois:

$("#mydiv").click(function() 
{ 
    console.log("something 1"); 
}); 
$("#mydiv").click(function() 
{ 
    console.log("something 2"); 
}); 
2

Vous pouvez probablement écrire vos deux fonctions comme fonctions réelles, appelez pour chaque de vos fonctions anonymes. Comme ceci:

function a() 
{ 
    console.log("something"); 
} 

function b() 
{ 
    console.log("something"); 
} 

$("#id").click(function(){ 
    a(); 
    b(); 
}); 
+1

Solution simple et claire. –

Questions connexes