11521 sujets

JavaScript, DOM et API Web HTML5

Bonjour, Me revoilà avec mes fonctions qui marches pas Smiley sweatdrop .
Bon javais déjà fait avec à votre aide une fonction similaire.
Je veux faire une fonction qui cette fois selon la valeur d'une checkbox change la class d'une div spécifique. Mais voila en réutilisant la fonction et en la testant je me suis appérçus qu'elle ne marchait pas. La surprise.
$disponibi = get_sub_field( 'calendrier_section_2_gamme_conventionnelle__janvier_concombre' );
                echo $disponibi;
                function returndis() {
                    if ( $disponibi == "disponible" ){
                      return "dispo";
                    }
                    else{
                        return "fasle";}
                }
                $dip = returndis();
                echo $dip;
            ?>

Les echo sont là pour me montré ou se trouvait l'erreur, la function fait sont travail mais au lieu de me retourné dispo il me return false alors que $disponibi est bien égale à disponible.
Bon même avec false la suite de la function ne fonctionne pas, la classe de la scible ne change pas.

<?php 
                
                $disponibi = get_sub_field( 'calendrier_section_2_gamme_conventionnelle__janvier_concombre' );
                echo $disponibi;
                function returndis() {
                    if ( $disponibi == "disponible" ){
                      return "dispo";
                    }
                    else{
                        return "fasle";}
                }
                $dip = returndis();
                echo $dip;
            ?>
            <script>
                var dispo = "<?PHP echo $dip;?>";
                function load(){
                    if( dispo == 'disponible'){
                        document.getElementById("FConcombreJa").setAttribute("class", "dispo");
                    }
                    else if ( dispo == 'false'){
                        document.getElementById("FConcombreJa").setAttribute("class", "nndispo");
                    }
                    else{
                                return false;
                            }
                }   

            </script>

Si quelqu’un à une idée je suis preneur.
Bonne journée à tous .
Modérateur
Salut,

Je pari sur une histoire de scope.
Tente avec :
function returndis($disponibi) {

et
$dip = returndis($disponibi);

Tu peux même changer le nom de la variable dans la fonction pour pas te mélanger


php.net a écrit :
<?php
$a = 1; /* global scope */

function test()
{
echo $a; /* reference to local scope variable */
}

test();
?>

https://www.php.net/manual/en/language.variables.scope.php
Modifié par _laurent (19 Aug 2020 - 10:48)
Bonjour, merci pour la réponse _Laurent mais sa ne marche pas. wordpress me met There has been a critical error on your website.
j'ai tenté de changer la fonction
$disponibi = get_sub_field( 'calendrier_section_2_gamme_conventionnelle__janvier_concombre' );
                echo $disponibi;
                function returndis() {
                    if ( $disponibi == "disponible" ){
                      return "dispo";
                    }
                    else{
                        return "fasle";}
                }
                $dip = returndis();
                echo $dip;
            ?>
par
$disponibi = "disponible";
                echo $disponibi;
                function returndis() {
                    if ( $disponibi == "disponible" ){
                      return "dispo";
                    }
                    else{
                        return "fasle";}
                }
                $dip = returndis();
                echo $dip; ?>

Je me disait comme sa il est obliger de me retourner la dispo mais non il me met toujours false. Je suis perdu comment deux c'est possible ?
Modifié par snotra (19 Aug 2020 - 10:56)
Modérateur
Désolé j'ai édité mon message entre temps t'as pas du le voir du coup. Teste comme ça :

$disponibi = "disponible";
 echo $disponibi;

function returndis($test) {
    if ( $test == "disponible" ){
        return "dispo";
    }else{
        return "fasle";
    }
}
$dip = returndis($disponibi);
echo $dip; ?>
Me revoilà La première partie marche merci encore _Laurent mais la deuxième partie ne marche pas. ne sachant pas si le onload été mal fait j’ai changer pour un window.onload et j’ai changer mon setAtribute par un .style.backgroundColor = "lightblue";
voila le code
var dispo = "<?PHP echo $dip;?>";
                window.onload = function load(){
                    if( dispo == 'disponible'){
                        document.getElementById("FConcombreJa").style.backgroundColor = "lightblue";
                    }
                    else if ( dispo == 'false'){
                        document.getElementById("FConcombreJa").style.backgroundColor = "lightblue";
                    }
                    else{
                                return false;
                            }
                }   
mais il ne fait rien.
Modérateur
[EDIT]Réponse éronée, on est passé a du Js j'avais pas vu[/EDIT]

Bah forcément
'<?PHP echo $dip;?>' n'est pas égal à 'disponible' ou 'false' Smiley lol
Si tu le marque comme ça il va prendre <?PHP echo $dip;?> comme un string en tant que tel... t'es déjà dans du php pourquoi tu mets les <?php ?> ? pourquoi tu fais un echo ? Pourquoi tu test pas juste $dip ?

Et sinon c'est le meme problème de scope qu'au dessus, à l'intérieur de ta fonction il ne connait pas dispo, il faut lui passer en argument.
Modifié par _laurent (19 Aug 2020 - 12:12)
Je comprend pas pourquoi sa marche pas j’ai repris une fonction qui marchait faite sur un autre site qui faisait la même chose à peu de chose prés
<?php  
                $aa = iddd();
                function iddd() {
                    if ( is_page( '13' ) ){
                      return "LLGH5" ;
                    }
                    else if ( is_page( '354' ) ) {
                      return "LLGH6" ;
                    }
                    else if ( is_page( '352' ) ) {
                        return "LLGH4" ;
                      }
                      else if ( is_page( '350' ) ) {
                        return "LLGH3" ;
                      }
                      else if ( is_page( '348' ) ) {
                        return "LLGH2" ;
                      }
                      else if ( is_page( '346' ) ) {
                        return "LLGH1" ;
                      }
                    else { return "false";
                    }
                }
                ?>
               <script>
                    var idpages = "<?PHP echo $aa;?>";
                    function loadlogo(){
                        if( idpages == "LLGH5"){
                            document.getElementById("LLGH5").setAttribute("class", "LLGHSTATIC");}
                        else if( idpages == "LLGH6"){
                            document.getElementById("LLGH6").setAttribute("class", "LLGHSTATIC");}
                        else if( idpages == "LLGH4"){
                            document.getElementById("LLGH4").setAttribute("class", "LLGHSTATIC");}
                        else if( idpages == "LLGH3"){
                            document.getElementById("LLGH3").setAttribute("class", "LLGHSTATIC");}
                        else if( idpages == "LLGH2"){
                            document.getElementById("LLGH2").setAttribute("class", "LLGHSTATIC");}
                        else if( idpages == "LLGH1"){
                            document.getElementById("LLGH1").setAttribute("class", "LLGHSTATIC");}
                            else{
                                return false;
                            }
                    }
                </script>
elle marche nickel et la c'est la guerre. (les fonctions auront ma peau ou au moins mes neurones.)
Modifié par snotra (19 Aug 2020 - 12:10)
Modérateur
Ah mince on était passé a du Js ! J'avais la tete dans le php t'es passé au Js sans prévenir hahaha

Alors dans le Js oui
var dispo = "<?PHP echo $dip;?>";

ca marche. Pas de soucis. désolé. idem pour le reste.

Ta fonction marche bien : https://jsfiddle.net/undless/qu4zcpvr/

J'imagine donc qu'il y a un soucis au niveau du
var dispo = "<?PHP echo $dip;?>";

tu peux faire un console.log de dispo pour voir ce qu'il y a dedans.
Meilleure solution
Merci de ta patience _Laurent la fonction marche. Le problème venait du cache du navigateur et surement d'un oublie de ;
je pose la fonction finie et fonctionnel la si jamais sa peu aider.

<?php 
                
                $disponibi = get_sub_field( 'calendrier_section_2_gamme_conventionnelle__janvier_concombre' );
                
               
               function returndis($test) {
                   if ( $test == "disponible" ){
                       return "dispo";
                   }else{
                       return "fasle";
                   }
               }
               $dip = returndis($disponibi);
               echo $dip;
                ?>
            <script>
                var dispo = "<?PHP echo $dip;?>";
          onload = function load(){
                  
                    if( dispo == 'dispo'){
                        document.getElementById("FConcombreJa").style.backgroundColor = "lightblue";
                    }
                 
                    else{
                        document.getElementById("FConcombreJa").style.backgroundColor = "red";
                            }
                }  

            </script>