2
votes

Utiliser la variable PHP comme paramètres de fonction Javascript

J'utilise Laravel et j'ai deux variables php dans ma vue en lame comme ceci:

<?php echo "<script> autoFill(".$dropDown.", ".$emptyDropDown."); </script>"; ?>

Et je crée une fonction Javascript avec deux paramètres dans la même vue en lame:

function autoFill (dropDown, emptyDropDown) {
    $("#" + dropDown ).change(function() { 

        $.ajax({
            type: "GET",
            url: "https://api.myjson.com/bins/bcnss",

            success: function(response){

                var dataLength = response.length;
                $("#" + dropDown).empty();
                $("#" + dropDown).append("<option value=''>Select</option>");
                for( var i = 0; i< dataLength; i++){
                    var id = response[i].id;
                    var name = response[i].name;
                    $("#" + dropDown).append("<option value='"+id+"'>" + name + " </option>");
                }
            }
        });
    });
}

Alors j'appelle ceci:

$dropDown = $formDataValue['name']
$emptyDropDown = $formDataValue['name'];

Le problème est qu'ils peuvent passer les paramètres pour fonctionner! Je vérifie l'élément dans le navigateur et je vois que lorsque j'appelle cette fonction, il a des paramètres. Mais dans la balise script, il n'y a rien!

 entrez la description de l'image ici

Comment puis-je résoudre ce problème?

Merci beaucoup!

p>


3 commentaires

autofill (city, ward) passerait les deux variables city et ward dans la fonction. Le reste de votre code semble cependant indiquer que vous souhaitez probablement plutôt passer des chaînes de texte à votre fonction ici.


Mettez votre ville et ward entre guillemets, car il n'y a pas de telles variables: autoFill ('{$ dropDown}', ' {$ emptyDropDown} '); "; ?>


Merci pour vos réponses. J'ai compris!


4 Réponses :


3
votes

On dirait que vous avez oublié les guillemets, lorsque vous passez des chaînes dans la fonction.

<?php echo "<script> autoFill('".$dropDown."', '".$emptyDropDown."'); </script>"; ?>

Vous pouvez le faire de cette façon, mais vous ne devriez pas, car Laravel Blade le fait pour vous-même.

<script>
    $(document).ready(function () {
        autoFill('{{ $dropDown  }}', '{{ $emptyDropDown }}');
    });
</script>


2 commentaires

Bon, il a oublié les citations


non, c'est du code javascript. vous devez simplement l'ajouter dans votre lame sous les variables définies et tout fonctionnera



1
votes

si vous utilisez laravel, essayez ceci

<script type="text/javascript">
autoFill("<?=$dropDown?>","<?=$emptyDropDown?>");

function autoFill(dropDown,emptyDropDown) {
    console.log(dropDown);
    console.log(emptyDropDown);
}

J'espère que cela vous sera utile

ne pas utiliser le noyau php

<script type="text/javascript">
autoFill("{{$dropDown}}","{{$emptyDropDown}}");

function autoFill(dropDown,emptyDropDown) {
    console.log("hi");
}


0 commentaires

1
votes

Vous n'avez pas rendu les valeurs sous forme de chaînes, donc javascript les interprète comme des variables, qui ne sont pas définies.

donc au lieu de autofill(city,ward)

vous voulez autofill('city','ward')

1000 façons de rome, ce serait une:

<?php echo "<script> autoFill('$dropDown', '$emptyDropDown'); </script>"; ?>


0 commentaires

3
votes

Vous pouvez affecter la valeur php dans la variable js dans le fichier lame comme ci-dessous:

$(document).ready(function() {
    autoFill(dropDown, emptyDropDown);
});

puis utiliser le fichier js et déplacer la fonction autoFill () dans le fichier js et appeler ce fichier js lame utilisant. et appelez autoFill (dropDown, emptyDropDown); dans le fichier js sur document.ready Comme:

<script>
    var dropDown = '{{$formDataValue['name']}}';
    var emptyDropDown = '{{$formDataValue['name']}}';
</script>


1 commentaires

Merci pour ton aide! Un nouveau conseil pour moi.