user8631931
user8631931

Reputation:

PHP variable passing into a JS function Does not work

I am working on a project that has a table. in that table is milestones and parts of milestones.

This is my code:

<?php
$milestones = array();
while ($rij = $db->fetchassoc($result)) {
    $milestones[$rij['milestone_id']][] = $rij;
}
foreach ($milestones as $milestone) {
    echo '<tr id="' . $milestone[0]['milestone_id'] . '" class="milestone' . $milestone[0]['milestone_id'] . '">';
    echo '<td>' . $milestone[0]['milestone_id'] . '</td>';
    echo '<td><a href="javascript:keuzeGebruiker(milestone' . $milestone[0]['milestone_id'] . ',' . $milestone[0]['milestone_id'] . ');">' . $milestone[0]['milestone_titel'] . '</a></td>';
    echo '<td>' . $milestone[0]['client'] . '</td>';
    echo '</tr>';

    for ($i = 0; $i < count($milestone); $i++) {
        if (empty($milestone[$i]['milestonefase_titel'])) {
            echo '<tr id="' . $milestone[$i]['milestonefase_id'] . '" class="milestone' . $milestone[$i]['milestone_id'] . 'fase fase">';
            echo '<td></td>';
            echo '<td style="color: red">Geen titel beschikbaar!</td>';
            echo '<td></td>';
            echo '</tr>';
        } else {
            echo '<tr id="' . $milestone[$i]['milestonefase_id'] . '" class="milestone' . $milestone[$i]['milestone_id'] . 'fase fase">';
            echo '<td>' . $milestone[$i]['milestonefase_id'] . '</td>';
            echo '<td>' . $milestone[$i]['milestonefase_titel'] . '</td>';
            echo '<td></td>';
            echo '</tr>';
        }
        if (!isset($_COOKIE['milestones'])) {
            echo '<style>.fase{display: none;}</style>';
        }
        if (strpos($_COOKIE['milestones'], $milestone[0]['milestone_id']) !== false) {
            echo '<style>.milestone' . $milestone[0]['milestone_id'] . 'fase{display: table-row!important;}</style>';
        }
    }
}
?>

I need to send variable:

href="javascript:keuzeGebruiker(milestone'.$milestone[0]['milestone_id']. ','.$milestone[0]['milestone_id'].');" but that variable does not send to my JS function.

My first parameter is the name of the clicked milestone (example 'milestone403') and my second parameter is the id of the clicked milestone (example: '403').

But my console log is saying:

ReferenceError: milestone403 is not defined

This is my JS function:

<script>
    document.cookie = "milestones=" + [readCookie()];
    var array = readCookie().split(",");

    function keuzeGebruiker(name, value)
    {
        if ($('.' + name + "fase").is(":visible")) // Als milestone zichbaar is, dan word milestone onzichtbaar
        {
            var index = array.indexOf(value);
            if (index !== -1)
            {
                array.splice(index, 1);
            }
            document.cookie = "milestones=" + array;
            $('.' + name + 'fase').attr('style', 'display:none !important')// Maak het onzichtbaar
        } else // Als milestone onzichtbaar is, dat word milestone zichtbaar
        {
            array.push(value);
            document.cookie = "milestones=" + array;
            $('.' + name + 'fase').attr('style', 'display:table-row !important')
        }
    }
</script>

You can see my parameters (name and value )

Why I can not get my parameter in my JS function?? Can anyone help me with this problem or has anyone a solution.

Upvotes: 1

Views: 80

Answers (3)

tomekK
tomekK

Reputation: 139

ReferenceError: milestone403 is not defined means that js thinks your trying to use variable milestone403 . So i gues it'll help if you use apostrophe it'll help.

somethink like:

keuzeGebruiker("milestone'.$milestone[0]['milestone_id']. ','.$milestone[0]['milestone_id'].'");"

or

$milestoneString=milestone'.$milestone[0]['milestone_id']. ','.$milestone[0]['milestone_id'];
href="javascript:keuzeGebruiker(\''.$milestoneString.'\');"

Upvotes: 0

Pankaj Makwana
Pankaj Makwana

Reputation: 3050

If you have not use string in quote, it will consider as a variable. You should send string in quotes in function, below is not correct way

echo '<td><a href="javascript:keuzeGebruiker(milestone' . $milestone[0]['milestone_id'] . ',' . $milestone[0]['milestone_id'] . ');">' . $milestone[0]    ['milestone_titel'] . '</a></td>';

Correct way is below

echo '<td><a href="javascript:keuzeGebruiker(\'milestone' . $milestone[0]['milestone_id'] . '\',\'' . $milestone[0]['milestone_id'] . '\');">' . $milestone[0]['milestone_titel'] . '</a></td>';

Upvotes: 0

aynber
aynber

Reputation: 23011

You need to quote the strings being passed into the javascript function, or else it will think they're javascript variables. Since you're using both single and double-quotes already, you'll need to escape your quotes. This is a case where templating or using HTML and then inserting PHP variables would make things easier.

echo '<td><a href="javascript:keuzeGebruiker(\'milestone'.$milestone[0]['milestone_id']. '\',\''.$milestone[0]['milestone_id'].'\');">' . $milestone[0]['milestone_titel'] . '</a></td>';

Upvotes: 1

Related Questions