IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

[AjaxControlToolkit]Problème avec une fonction js sur un CalendarExtender


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Par défaut [AjaxControlToolkit]Problème avec une fonction js sur un CalendarExtender
    Bonjour tout le monde .

    Mon problème se situe sur une fonction js appelée sur le OnClientDateSelectionChanged d'un CalendarExtender.

    En fait, je passais avant par une fonction directement intégrée dans un ascx, cela se présentait ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
     
    <script type="text/javascript" language="javascript">
    //Limitation des dates des CalendarExtender
        function LimitCalendarExtender() {
     
     
            //Obtenir les CalendarExtender
            var calendarStart = $find('<%=CalendarExtenderStartDate.ClientID %>');
            var calendarEnd = $find('<%=CalendarExtenderEndDate.ClientID %>');
     
           //Traitements...
     
        }
     
    </script>
    <ajx:CalendarExtender runat="server" ID="CalendarExtenderStartDate" OnClientDateSelectionChanged ="LimitCalendarExtender"/>
     
    <ajx:CalendarExtender runat="server" ID="CalendarExtenderEndDate" OnClientDateSelectionChanged ="LimitCalendarExtender"/>
    Dans ce cas là, ça fonctionne parfaitement, je récupère bien les calendarextender et je peux faire mes traitements.

    Le soucis, c'est que je dois faire exactement la même chose sur une autre page, alors plutôt que de me retaper tout le code, j'ai décidé de mettre mes fonctions js dans un fichier js, et de faire un RegisterClientScriptInclude:

    Fichier JS:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    //Limitation des dates des CalendarExtender
    function LimitCalendarExtender(calendarStartClientId,calendarEndClientId) {
     
     
        //Obtenir les CalendarExtender
        var calendarStart = $find(calendarStartClientId);
        var calendarEnd = $find(calendarEndClientId);
     
     
     
    }
    Et mon RegisterClientScriptInclude dans mon ascx.cs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    protected override void OnInit(EventArgs e)
        {
     
            ScriptManager.RegisterClientScriptInclude(this.Page, typeof(Page), "FonctionsJS", @"Scripts/FonctionsJS.js");
    }
    Et donc sur mon ascx, je fais ainsi appel aux fonctions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <ajx:CalendarExtender runat="server" ID="CalendarExtenderStartDate" OnClientDateSelectionChanged ="LimitCalendarExtender('<%=CalendarExtenderStartDate.ClientID %>','<%=CalendarExtenderEndDate.ClientID %>')"/>
     
    <ajx:CalendarExtender runat="server" ID="CalendarExtenderEndDate" OnClientDateSelectionChanged ="LimitCalendarExtender('<%=CalendarExtenderStartDate.ClientID %>','<%=CalendarExtenderEndDate.ClientID %>')"/>
    Et là, quand je lance mon ascx, j'ai une erreur JS : "Erreur Javascript, Objet Attendu", le debuggueur s'arrêtant sur OnClientDateSelectionChanged de mon ascx.

    Quand je fais un RegisterClientScriptInclude, il trouve bien mon fichier JS, y'a pas de soucis là dessus.

    Merci de votre aide ^^.

  2. #2
    Membre Expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Par défaut
    Dans le code source de ta page générée, est-ce que l'inclusion de ton fichier JS se fait avant ou après celle de ton contrôle Calendar ?

  3. #3
    Membre éclairé Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Par défaut
    Elle s'effectue bien avant.

  4. #4
    Membre éclairé Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Par défaut
    Bon, en fait j'avais une erreur de chemin assez grossière, mais il reste des erreurs, j'ai changé ma fonction js comme suis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    //Limitation des dates des CalendarExtender
    function LimitCalendarExtender(idCalendar,isStart) {
     
        var calendarTest = $find(idCalendar);
     
     
        if (calendarTest != null) {
     
            LimitByDefaultDate(calendarTest, isStart);
     
        }
    Je passe en paramètre le client id de mon calendar et lui indique si c'est un calendar de début ou de fin.

    Mon ascx:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <ajx:CalendarExtender runat="server" ID="CalendarExtenderStartDate" OnClientDateSelectionChanged="LimitCalendarExtender('<%=CalendarExtenderStartDate.ClientID %>','true')"/>

    Le bug, c'est qu'il passe dans ma fonction dès le chargement de la page(il ne trouve pas le calendar correspondant à l'Id), alors qu'il n'y a pas eu de changement de date de lancée, et j'ai une nouvelle erreur qui est la suivante :

    Erreur:Sys.InvalidOperationException: Handler must be a function.

    Je ne peux pas passer de paramètres à une fonction ou quoi ????

    Edit:Quand on ne passe pas de paramètres à la fonction, et que dans le js on met juste un argument, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function maFonction(test)
    {
     if(test != null)
    {
     //Traitements.
    }
    }
    test correspond alors au contrôle qui a lancé l'event (ici, notre calendarextender), et donc on peut faire des traitements dessus. Je trouve ça un peu bizarre...

  5. #5
    Membre éclairé Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Par défaut
    Je pense que j'y suis presque, il faut créer une fonction qui va appeler la fonction voulue pour que ca fonctionne, en gros:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <ajx:CalendarExtender runat="server" ID="CalendarExtenderStartDate" OnClientDateSelectionChanged="function(){LimitCalendarExtender('<%=CalendarExtenderStartDate.ClientID %>','true');}"/>
    Mais, si je fais un $find, il ne trouve toujours pas mon calendar... (= null).

  6. #6
    Membre éclairé Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Par défaut
    Ca y'est !

    Il faut déclarer, en global dans la page ascx, une fonction GetCalendar() (par exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    function GetCalendar() { var calendarStart = $find('<%=CalendarExtenderStartDate.ClientID %>');return calendarStart; }
    et dans le OnClientDateSelectionChanged:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <ajx:CalendarExtender runat="server" ID="CalendarExtenderStartDate" OnClientDateSelectionChanged="function(){ var myStartCalendar = GetCalendar();  LimitCalendarExtender(myStartCalendar,'true');}"/>
    On passe l'objet ainsi récupéré ^^ !

    Merci de votre aide en tout cas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec une fonction
    Par mademoizel dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 24/06/2006, 10h51
  2. problème avec une fonction javaScript
    Par volthur dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 16/05/2006, 18h04
  3. Problème avec une fonction utilisateur !
    Par nalou dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 20/04/2006, 17h06
  4. Problème avec une fonction et un array
    Par Neal Morse dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 28/08/2005, 12h04
  5. Problème avec une fonction date.
    Par kmayoyota dans le forum ASP
    Réponses: 8
    Dernier message: 09/09/2004, 12h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo