javascript
  • variables
  • scope
  • return-value
  • 2009-12-10 4 views 1 likes 
    1

    script sont suivant:js portée variable - retour affectation initiale au lieu de changer

    function clicker(){ 
    var linkId = "[id*=" + "link]"; 
    var butnId='initial';  
        $j(linkId).click(function(){ 
         var postfix = $j(this).attr('id').substr(4); 
         butnId = '#' + 'butn' + postfix; 
         }); 
    
    return butnId; 
    
    } 
    

    sortie de fonction est la valeur 'initiale'.

    Comment retourner la valeur réelle de la variable butnId, après avoir été transformé au sein de la fonction de clic?

    +0

    on ne sait pas, à partir de votre code, ce que vous voulez vraiment atteindre ici. quand 'clicker' revient, il n'aura pas exécuté la partie' postfix'. tout ce qu'il a fait était de dire que ce code devrait être exécuté * quand un certain lien est cliqué *. il n'y a pas de boucle pour transformer la valeur. Qu'est-ce que vous voulez que 'clicker' atteigne? –

    +0

    Je veux extraire un postfix du lien cliqué, et sur sa base je saurai quel lien devrait être cliqué suivant - son ID est butnId. Semble que je pense à partir du point Java, lorsque j'initialise la variable, transtom à l'intérieur, par exemple. boucle, et sa valeur est modifiée. Donc, je vais essayer vos propositions ci-dessous. Merci. – sergionni

    +0

    Je veux ajouter, que j'effectue un clic sur l'interface utilisateur et que butnId est vraiment changé, mais il est inchangé en tant que sortie de fonction, donc il ne sort pas de la portée de la fonction de clic et reste immuable. – sergionni

    Répondre

    2

    Le code à l'intérieur de la fonction transmise à click n'est pas exécuté tant que l'élément n'a pas été cliqué.

    Vous devez probablement l'appelant de clicker passer dans une fonction de rappel qui peut alors être appelée par la fonction de clic (en supposant que vous ne voulez pas coder en dur l'action requise dans la fonction de clic lui-même): -

    function clicker(callback){ 
    var linkId = "[id*=" + "link]"; 
    var butnId='initial';  
        $j(linkId).click(function(){ 
         var postfix = $j(this).attr('id').substr(4); 
         butnId = '#' + 'butn' + postfix; 
           callback(butnId); 
         }); 
    
    return butnId; 
    
    } 
    

    qui peut probablement refactorisé à: -

    function clicker(callback){ 
    var linkId = "[id*=" + "link]"; 
        $j(linkId).click(function(){ 
         var postfix = $j(this).attr('id').substr(4); 
         callback('#' + 'butn' + postfix); 
         });  
    } 
    
    Questions connexes