Problème d'exécution d'un script JS

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [RÉGLÉ] Problème d'exécution d'un script JS

    Bonjour,
    Je souhaite exécuter un script JS (dans une vue) qui observe l'état d'un champ "Checkbox"
    Les champs déclarés dans le fichier XML:
    Code HTML:
    <field id="PhotoPrincipale" name="photoprincipale" type="File" label="Photo principale" description="" />
    <field type="checkbox" id="accept" label="J'accepte" name="accept" required="true"/>
    Quand la case à cocher change d'état, je souhaite contrôler si le champ "file" est vide ou pas.
    Dans la vue j'appelle ces champs ainsi:
    Code PHP:

        <?php echo $this->form->renderField('photoprincipale'); ?>

    <div class="format-bloc" >
            <div style="color:#56a8e3; font-weight:700;margin-bottom:20px">
            <?php echo $this->form->renderField('accept'); ?>
                <?php echo " Cochez la case pour accepter que cette annonce soient diffusées dans les annonces du site" ?>
            </div>
        </div>
    Dans la vue j'ai ce script:
    Code PHP:
    <script type="text/javascript">
                jQuery('#accept').change(function(){
                 var DisplayYes = "";
                 var DisplayNone = "none";

                 if (document.getElementById('PhotoPrincipale').value == null) {
                    alert('La photo proncipale est obligatoire.');
                    jQuery('#Displaynone').val(DisplayNone);
                    jQuery('#Displayyes').val(DisplayYes);
                    break;}
                });
                </script>

    <?php
    echo $Displayyes;
    echo 
    $Displaynone;
    ?>
    Rien ne se passe.
    jquery.min.js est-il chargé ?

    Dans le doute j'ai ajouté la ligne pour charger jquery.min.js.
    Code PHP:
    $doc JFactory::getDocument();
    $doc->addScript(JUri::base() . '/media/com_esoffers/js/form.js');
    $doc->addScript(JUri::base() . 'https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js'); 
    Mais rien ne change.

    Quelqu'un saurait-il me dire ce qui peut se passer ?

    Cordialement.

    Eric
    Dernière édition par Agrepe à 04/06/2018, 14h29

  • #2
    Tu as le lien du site en production, peut être plus facile pour certains, pour tester directement.

    Commentaire


    • #3
      Bonjour ZerooCool,
      C'est compliqué car il s'agit d'un site ou il faut obligatoirement être inscrit.
      Bien cordialement.
      Eric

      Commentaire


      • #4
        Bonjour Eric,

        Pour être sûr que jQuery soit chargé, la syntaxe est JHtml::_('jquery.framework');

        Je ne sais pas ce que JUri::base() suivi d'une adresse http peut donner, enfin si, je le sais et ce n'est pas vraiment ce que tu souhaites...

        Pascal
        If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

        Commentaire


        • #5
          Bonjour Pascal,
          Merci beaucoup.
          En fait je me suis rendu compte que jQuery était déjà chargé.

          Je viens de voir que mon souci vient de:
          Code PHP:
          if (document.getElementById('PhotoPrincipale').value == null
          Qui ne vérifie pas si
          Code PHP:
          <div id="PhotoPrincipale">
              <?php echo $this->form->renderField('photoprincipale'); ?>
              </div>
          est vide ou pas.
          J'ai recherché des docs, j'ai vu plusieurs "solutions" que j'ai testé, mais rien ne fonctionne.
          (value == "" ou encore value == '')

          Je persévère.

          Cordialement.

          Eric

          Commentaire


          • #6
            En fait, je me demande s'il est possible de vérifier s'il est possible de vérifier si un champ "file" est vide ou pas ?

            Commentaire


            • #7
              As-tu essayé de mettre un default dans le XML pour l'id PhotoPrincipale , même si ce paramètre peut sembler superflu ?

              D'autre part, es-tu sûr que document.getElementById('PhotoPrincipale').value retourne bien quelque chose ? As-tu regardé par l'inspecteur si tu trouves bien une zone avec cet id ?

              Pascal
              If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

              Commentaire


              • #8
                J'ai bien tenté de mettre l'i dans l'XML, et aussi une balise HTML "default", mais ça ne change rien.

                Tu as raison, quand j'inspecte le champ, je vois :
                div class="controls"><input type="file" name="jform[photoprincipale][]" aria-invalid="false"></div>
                dans l'inspecteur, je n'ai pas cela dans mon fichier.

                Je n'ai que:
                Code PHP:
                <div id="PhotoPrincipale">
                    <?php echo $this->form->renderField('photoprincipale'); ?>
                    </div>

                                <?php if (!empty($this->item->photoprincipale)) : ?>
                                    <?php $photoprincipaleFiles = array(); ?>
                                    <?php foreach ((array)$this->item->photoprincipale as $fileSingle) : ?>
                                        <?php if (!is_array($fileSingle)) : ?>
                                            <a href="<?php echo JRoute::_(JUri::root() . 'uploads' DIRECTORY_SEPARATOR $fileSinglefalse);?>"><?php echo $fileSingle?></a> | 
                                            <?php $photoprincipaleFiles[] = $fileSingle?>
                                        <?php endif; ?>
                                    <?php endforeach; ?>
                                <?php endif; ?>

                                <input type="hidden" name="jform[photoprincipale_hidden]" id="jform_photoprincipale_hidden" value="<?php echo implode(','$photoprincipaleFiles); ?>" />

                Commentaire


                • #9
                  Salut
                  elle est tjs d'actu cette ligne la?

                  Code PHP:
                  $doc->addScript(JUri::base() . 'https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js'); 
                  JUri::base() ;

                  c'est l'url de ton site auquel tu rajoutes la suite. Du coup, ca fait
                  https://www.monsiteenjoomla.org/https://ajax.googleapis......
                  Donc echec assuré.

                  ++

                  Commentaire


                  • #10
                    Non, mais elle ne l'est plus. Mais jquery.min.js était déjà chargé, mon souci n'était pas là.
                    Pour les fichiers js, je préfère stocker dans le dossier media/mon_extension... puis ce que j'utilise c'est:

                    JHTML::script('nom_du_fichier.js','/chemin');

                    Par exemple: JHTML::script('jquery.googlemap.js','/media/com_esoffers/js/');
                    Dernière édition par Agrepe à 12/06/2018, 17h10

                    Commentaire


                    • #11
                      J'en suis arrivé à une conclusion, vérifier le contenu d'un champ "File" semble impossible, alors j'ai créé un petit script qui met une photo par défaut quand le champ dans la table est vide.

                      Commentaire

                      Annonce

                      Réduire
                      Aucune annonce pour le moment.

                      Partenaire de l'association

                      Réduire

                      Hébergeur Web PlanetHoster
                      Travaille ...
                      X