2009-06-30 5 views
0

J'ai une page qui fait des post-ajouts ajax ASP.NET en utilisant UpdatePanels. Dans certains javascript, j'ai mis en place des objets dans l'événement window.onload, ce qui fonctionne très bien. Quand je fais une publication, il semble que mes objets soient foirés.Est-ce que ajax dégrade mes objets javascript?

Un objet qui recevait des événements d'une table, ne reçoit plus les événements. J'ai également eu un cas où les objets qui ont des références locales aux boutons ne seraient pas en mesure de les mettre à jour. Voici le bouton javascript qui devenais foiré:

function EditItemPage(clientId) 
{ 
    this.saveButton = $get(clientId + ""_{2}"") 
    this.publishButton = $get(clientId + ""_{3}"") 
    this.exitButton = $get(clientId + ""_{4}"") 

    EditItemPage.prototype.GoDirty = function() 
    { 
     //it works if i add these, but i'd rather not have to. 
     this.saveButton = $get(clientId + ""_{2}"") 
     this.publishButton = $get(clientId + ""_{3}"") 
     this.exitButton = $get(clientId + ""_{4}"") 

     this.saveButton.disabled = false; 
     this.publishButton.value = 'Save and Publish'; 
     this.exitButton.value = 'Discard changes and Exit'; 
    } 
} 

Alors après je fais une publication, les références des boutons sont embrouillés à moins que je les remis à zéro comme je l'ai dans la fonction GoDirty().

Un aperçu?

Répondre

2

Les changements en fonction de ce que la fonction de mots-clés this (variable spéciale) est l'appeler. Fondamentalement, c'est une question de portée. Vous devez soit faire une fermeture autour de la fonction qui est appelée sur la réponse ajax, OU mettez ce dont vous avez besoin dans la portée globale, ou faites ce que vous faites (ce que vous n'aimez pas).

L'écriture de la fermeture est la "bonne" façon.

Vous connaissez peut-être la façon dont la portée des changements variables this en fonction des événements pour les entrées de formulaire. Pour une zone de texte, si vous utilisez l'événement onblur, le this fait référence à la zone de texte qui vient de perdre le focus.

See this question for an example of how to do the closure.

This is also another good resource.

(je suis sûr que je pourrais copier et coller les exemples ici pour vous, mais cela semble redondant)

Questions connexes