2010-04-23 8 views
0

Je travaille sur ce script:variables globales dans jQuery

<script type="text/javascript" src="/js/jquery.js"></script> 
<script type="text/javascript"> 
$(function(){ 
    compentecy = $('#competency_id'); 
    $('#add_competency').bind('click', function(e){ 
     e.preventDefault(); 
     $.post('/script.php', {competency_id: compentecy.val(), syllabus_id: 2}, function(){ 
      // competency = $('#competency_id'); 
      competency.children('option[value=' + compentecy.val() + ']').remove(); 
     }); 
    }); 
}); 
</script> 

dans la fonction de rappel .post $, il semble que je ne peux pas accéder à des variables globales. J'ai essayé $.competency mais cela n'a pas fonctionné. J'ai toujours une erreur "compétence non définie". J'ai dû réinitialiser la variable à nouveau dans le rappel. Est-il possible de ne pas réinitialiser la variable à l'intérieur du rappel?

+1

Bien que n'étant pas idéal, cela devrait fonctionner. Est-ce le script entier, ou omettez-vous des parties ici? – deceze

Répondre

3

OMG. c'est un de ces jours je suppose. l'orthographe de la variable était incorrecte: P

+1

Content de l'avoir repéré. :) BTW, vous devez d'abord déclarer la variable avec 'var competency = $ ('# competency_id');' pour limiter la portée à votre fonction et à ses fonctions imbriquées, sinon elle sera attachée à la 'fenêtre' globale. – deceze

+1

Merde arrive, lol – Ben

1

Vous pouvez utiliser .proxy() comme ceci:

$.post('/script.php', {competency_id: compentecy.val(), syllabus_id: 2}, 
    $.proxy(function(){ 
    this.children('option[value=' + this.val() + ']').remove(); 
    }, compentecy) 
); 

$.proxy() permet à votre déterminer ce qui est à l'intérieur this le rappel, juste pour des cas comme celui-ci :)

+0

c'est bon à savoir. –