2010-06-04 8 views
1

Quelle est la différence Situés entre réglage de la fonction onclick de cette façon: obj.onclick=new Function('functionname') etRéglage événement onclick retrait des gestionnaires attachés avant

obj.onclick=function(){ functionname();}; 

Comment puis-je définir l'événement onclick supprimant tous previrius ci-joint? (En utilisant jquery ou simplement javascript) i essayer quelque chose comme ceci:

$ (obj) .unbind (clic);

$ (obj) .click (function() { nomfonction(); });

mais le unbind semble supprimer même les prochains événements attachés. grâce EDIT:

Je mis l'événement clic en utilisant jquery:

function ON(){ 
$('#makecorr').unbind('click');//i unbind for some reason..  
$('#makecorr').click(function() { OFF(); }); 
} 
function OFF(){ 
$('#makecorr').unbind('click');//i want to remove prev attached fun 
//and replace it with new event 
$('#makecorr').click(function() { ON(); }); 
} 

ce travail ne marche pas pour moi, quand je clique sur l'objet « makecorr » il va dans la boucle, si je mets une alerte, arrive infiniment mais quand je l'utilise: '

function ON(){ 
$('#makecorr').get(0).onclick=new Function('OFF()'); 
} 
function OFF() 
{ 
$('#makecorr').get(0).onclick=new Function('ON()'); 
} 

cela fonctionne. étrange où je me trompe?

Répondre

2

Cette paire de lignes:

$(obj).unbind('click'); 
$(obj).click(function() { functionname(); }); 

... si elle est exécutée dans l'ordre ci-dessus devrait entraîner juste le gestionnaire que vous y avez défini étant attaché. Si vous voyez un autre comportement, cela doit être quelque chose d'autre dans le script.

En ce qui concerne

Quelle est la différence Situés entre le réglage de la fonction onclick de cette façon:
obj.onclick=new Function('functionname') et
obj.onclick=function(){ functionname();};

Si vous ajoutez dynamiquement des gestionnaires à un élément et vous Si vous utilisez déjà jQuery pour d'autres raisons, vous ne voulez pas utiliser la propriété onclick; s'en tenir à l'API jQuery, pour éviter de vous tromper vraiment. :-)

Même si vous n'utilisez pas jQuery, vous avez presque jamais voulez utiliser new Function(...). Il n'y a que des situations très spéciales où vous en auriez besoin. Principalement coller à function() { functionname(); } (ou simplement utiliser functionname directement).

+0

@ user354881: Recommander la mise à jour de votre question avec cette info (formatée), c'est assez proche de l'illisible dans un commentaire. Je vais jeter un coup d'oeil quand je serai de retour. –