Je mets en cache les chaînes d'étiquettes en les enregistrant dans une variable, mais en rencontrant des problèmes de portée étranges. Je sais que cela a à voir avec les fermetures, mais je n'arrive pas à comprendre quel est le problème.Problèmes de portée dans jQuery.ajax()
info_lbl = {};
$("#chkCorporateGift").click(function(){
var type = $(this).is(":checked") ? "Corporate" : "Personal";
if(!info_lbl.hasOwnProperty(type)){
$.ajax({
url: svc_og + "Get" + type + "InformationLabel",
success: function(data){
info_lbl[type] = data;
}
});
}
$("#lblInformationType").text(info_lbl[type]);
});
label lblInformationType est pas défini la première fois des méthodes GetCorporateInformationLabel ou GetPersonalInformationLabel sont appelés. Après la première fois que chacun est appelé, la valeur de l'étiquette est modifiée. Quelqu'un pourrait-il expliquer pourquoi ce comportement se produit? Lorsque j'utilise Firebug et que je place un point d'arrêt sur $("#lblInformationType").text(info_lbl[type]);
, info_lbl[type]
contient la bonne valeur et tout fonctionne bien sur les deux premiers appels.
Merci beaucoup pour votre explication - cela a du sens maintenant. Pourquoi cela est-il plus efficace? – alkos333
@ alkos333 - De rien. : o) Et 'this.checked' est plus efficace car vous lisez directement la valeur de la propriété' checked' (qui sera true/false) de l'élément DOM au lieu de devoir créer un objet jQuery et lancer un ' : check'' filtre contre l'élément, seulement pour finir avec le même résultat. Imaginez si vous aviez une variable locale 'myVar' que vous saviez être' true' ou 'false'. Si vous vouliez utiliser la valeur de myVar, vous le demanderiez. Vous n'exécuterez pas de code qui vérifie si 'myVar' est vrai ou faux, et renvoie true ou false en fonction du résultat du test. : o) – user113716