web-dev-qa-db-fra.com

Après la publication, ma fonction JavaScript ne fonctionne pas dans ASP.NET.

J'ai des fonctions communes et je le réduis sur CommonFunctions.js dans le dossier Scripts.

Je l'inclue sur ma page maître et je l'utilise sur mes pages. Lorsque je poste n'importe quel message sur une page, ma fonction ne fonctionne pas.

Mon CommonFunctions.js

$(function () {

    gf();

   if (Sys.WebForms.PageRequestManager.getInstance().get_isInAsyncPostBack()) {

        gf();
    }


 function gf(){

    $('.AddNewGeneralPanel').click(function () {

        if ($(this).find('.AddNewGeneralPanelStyle').text() == "") {
            $(this).find('.AddNewGeneralPanelStyle').text("(  Gizle  )");
            lastOpenId = $(this).attr("kodid");
        }
        else
            $(this).find('.AddNewGeneralPanelStyle').text("");

        $(this).next('.AddNewGeneralAccordionDiv').slideToggle('slow', function () {

        });

    });
  }
});
11
Mennan

Étant donné que vous utilisez une variable UpdatePanel, la partie du DOM à laquelle vous avez associé votre gestionnaire d'événements est supprimée et recréée après la publication. Cela a pour effet de supprimer tous les gestionnaires d'événements attachés par jQuery lors du premier chargement de la page.

Lorsque vous publiez uniquement une partie de la page, la fonction jQuery $(function() {}); ne se déclenche plus et vos gestionnaires ne sont donc jamais rattachés.

Voici une question related qui montre comment réinscrire vos événements lorsque la variable UpdatePanel est actualisée.

13
Josh Earl

C’est à cause des publications partielles updatepanel. Voici ce que tu dois faire.

function pageLoad(sender, args)
{
  $(document).ready(function(){   

   // put all your javascript functions here 

  });
}

J'ai eu le même problème et cela a fonctionné pour moi. J'espère que cela vous aide aussi.

20

C'est à cause de updatepannel utilisé. Le code suivant fonctionne bien. Il suffit de mettre votre code jquery dans l'événement pageLoad comme ci-dessous

function pageLoad(sender, args) {
     $(document).ready(function () {....}
}
7
user3783446

j'ai le même problème, j'ai résolu avec ce code:

<script type="text/javascript">
    function pageLoad()
    {
        $('#datetimepicker2').datetimepicker();           
    }
</script>
2

En supposant que vous utilisez un UpdatePanel pour effectuer la publication et que le code JS est associé à des éléments HTML dans le panneau de mise à jour, vous devez les attacher à nouveau lorsque le panneau de mise à jour est chargé. Vous pouvez connecter votre code à l'événement endRequest:

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler)

http://msdn.Microsoft.com/en-us/library/bb383810.aspx

N'oubliez pas que si vous utilisez plusieurs panneaux de mise à jour, vous devez vérifier quel panneau de mise à jour est actualisé et ne joindre que les événements nécessaires, sinon vous risqueriez de déclencher plusieurs événements.

1
Stilgar

Face au même problème. Changement 

$(document).ready(function() {

à

Sys.Application.add_load(function() {

cela le forcera à courir même sur postbacck partiel

0
Singh T