2011-05-05 4 views
2

J'ai un panneau de mise à jour mais il semble enlever une classe d'un de mes entrées une fois qu'il a mis à jourAjax/Asp.Net Panel mise à jour problème

Voici le code du premier chargement

<input type="text" class="txt1 hasDatepicker" id="txt1" name="txt1"> 

Et voici le code après la mise à jour a couru

<input type="text" class="txt1" id="txt1" name="txt1"> 

Voici le jQuery qui fonctionne côté client

$(function() { 
    $(".txt1").datepicker({ dateFormat: 'D d M yy' }); 
}); 

Il semble juste supprimer la classe hasDatepicker après que la mise à jour a fonctionné et qu'elle cause des problèmes.

Des idées pourquoi ça fait ça? L'événement jQuery ready se déclenchera une fois que la page sera chargée pour la première fois.

+0

est la classe hasDatepicker ajouté sur le côté client par hasard? – Menahem

+0

@Menahem Oui c'est - je ne peux pas comprendre pourquoi il ne l'ajoute pas à nouveau une fois que la mise à jour a fonctionné? –

+0

ressemble à ce que le script client n'est pas exécuté après la publication ajax, peut-être à cause de ce que Mohamed saisit ... – Menahem

Répondre

3

Il ne détecte pas AJAX mis à jour même appelé depuis jQuery lui-même, car la page est déjà là. Cependant, il existe une méthode similaire à Page_Load sur le serveur, si elle existe dans la portée globale de JavaScript, elle est appelée une fois la page chargée - en termes ASP.NET, soit la première fois, soit après une publication partielle/asynchrone mise à jour/ajax refresh.

Le nom est légèrement différent pour correspondre les conventions JavaScript:

function pageLoad(){ 
    $(".txt1").datepicker({ dateFormat: 'D d M yy' }); 
} 

Essayez et dites-moi dans les commentaires si ça ne fonctionne pas ...

L'autre réponse (obtenir une référence de gestionnaire de script puis en appelant add_pageLoaded() et en passant une fonction) est comme dans ServerSide lorsque vous faites this.Load += new .... sur le côté du serveur alors que celui-ci est la version Page_Load (la connexion d'événement est activée par défaut). Bien sûr, je veux dire leur correspondant dans le côté client n'est pas exactement la même chose. Donc, les deux sont bien et les deux devraient fonctionner, mais la deuxième façon peut être utile si vous avez plusieurs gestionnaires d'événements de charge, ce qui peut compliquer les choses plus que nécessaire.

+0

qui fonctionne bien - merci –

1

Vous devrez utiliser PageRequestManager, qui nécessite ScriptManager sur la page. Vous pouvez le déclarer comme <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> puis dans PageRequestManager instancier comme:

<script type="text/javascript"> 
    var prm = Sys.WebForms.PageRequestManager.getInstance(); 
    prm.add_pageLoaded(SomeFunction); 
    prm.add_pageLoaded(function() {}); 

    function SomeFunction() {} 
</script> 
+2

Bien sûr, il a un gestionnaire de script ou UpdatePanel ne fonctionnerait pas :) – Meligy