2012-05-10 1 views
-2

Je veux passer des paramètres à la fonction dothis(param1, param2) appelée dans une autre fonction, i défini la fonction dothis(param1,param2) précédemment (qui prend deux paramètres param1 et param2) cela ne fonctionne pas:fonction d'appel avec des arguments dans une autre fonction

function longfunctionfirst(param1,callback) { 
setTimeout(function() { 
    dothis(param1,'param2'); 
    if(typeof callback == 'function') 
     callback(); 
}, 3000); 
}; 

function shortfunctionsecond() { 
setTimeout('whatever();', 200); 
}; 
longfunctionfirst(param1,shortfunctionsecond); 

modifié:

var param1 = document.getElementsByTagName("a")[0]; 

function dothis(element,event) { 
    if (document.createEvent) { 
    // dispatch for firefox + others 
    var evt = document.createEvent("HTMLEvents"); 
    evt.initEvent(event, true, true); // event type,bubbling,cancelable 
    return !element.dispatchEvent(evt); 
    } else { 
    // dispatch for IE 
    var evt = document.createEventObject(); 
    return element.dothis('on'+event,evt) 
    } 
} 
+0

il devrait fonctionner http://jsfiddle.net/zerkms/HHgmP/1/ – zerkms

+0

S'il vous plaît étendre l'exemple d'inclure un comme signature de 'param1', et une définition de' dothis'. – Deestan

+0

1) 'dothis' renvoie une valeur, mais personne ne la reçoit. – Deestan

Répondre

0

Pour passer les paramètres en l'état et l'utilisation arguments.apply()

function origin(a, b) { 
    nested.apply(this, arguments); 
} 

function nested (a, b) { 
    console.log(a, b); 
} 

origin('parameter1', 'parameter2'); 

http://jsfiddle.net/zerkms/HHgmP/

+0

J'espérais un exemple plus clair, merci – user1319236

+1

J'espérais une question plus claire, merci – zerkms

+0

en utilisant l'alerte au lieu de doThis (p1, 'p2') et quelquechose() cela fonctionne, quand il s'agit d'appeler doThis avec ses paramètres il doesn ' t – user1319236

0

Ce code ne fonctionne pas parce que l'argument param1 n'est pas défini dans la portée de la fonction anonyme setTimeout. Essayez de passer param1 jeter longfunctionfirst, comme:

function longfunctionfirst(param1, callback) { 
setTimeout(function() { 
    dothis(param1,'param2'); 
    if(typeof callback == 'function') 
     callback(); 
}, 3000); 
}; 

test cas

function dothis(param1,param2){alert(param1);} 
longfunctionfirst("xxx"); // alert with xxx will be displayed 
+0

j'ai essayé cela mais cela ne semble pas fonctionner non plus, merci – user1319236

+0

Oui, "xxx" est affiché, mais quand je passe var param1 à dothis ce n'est pas, bizarre .. – user1319236

+0

quand j'appelle longfunctionfirst avec un paramètre de callback (c'est-à-dire window.location.href = window.location.href (pour rafraîchir la page) à côté de "xxx" cela déclenche non seulement la deuxième fonction mais aussi l'expression d'alerte est appelé – user1319236

0

Votre problème est portée releated, la fonction setTimeout exécute en dehors du champ d'longfunctionfirst si param1 et rappel ne sont plus en la portée de la fonction anonyme, essayez comme ceci:

function dothis(param1,param2){alert(param1);} 

function whatever(){alert('Hello');} 

function longfunctionclosure(param1, callback) { 
    return function() { 
     dothis(param1,'param2'); 
     if(typeof callback == 'function') 
      callback(); 
    } 
} 

function longfunctionfirst(param1,callback) { 
    setTimeout(longfunctionclosure(param1, callback), 3000); 
}; 

function shortfunctionsecond() { 
    setTimeout('whatever();', 200); 
}; 
longfunctionfirst('test',shortfunctionsecond); 
Questions connexes