【问题标题】:PHP variable passing into a JS function Does not work传递给 JS 函数的 PHP 变量不起作用
【发布时间】:2024-05-23 11:30:01
【问题描述】:

我正在做一个有桌子的项目。在该表中是里程碑和里程碑的一部分。

这是我的代码:

<?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>';
        }
    }
}
?>

我需要发送变量:

href="javascript:keuzeGebruiker(里程碑'.$milestone[0]['milestone_id']. ','.$milestone[0]['milestone_id'].');" 但该变量不会发送到我的 JS 函数。

我的第一个参数是点击的里程碑的名称(例如'milestone403') 我的第二个参数是点击里程碑的 id(例如:'403')。

但我的控制台日志说:

ReferenceError:没有定义里程碑403

这是我的 JS 函数:

<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>

你可以看到我的参数(名称和值)

为什么我不能在我的 JS 函数中获取我的参数?谁能帮我解决这个问题或有任何人解决方案。

【问题讨论】:

  • 您需要引用进入 javascript 函数的变量,因为它们是字符串而不是 javascript 变量。

标签: javascript php html function multidimensional-array


【解决方案1】:

您需要引用传递给 javascript 函数的字符串,否则它会认为它们是 javascript 变量。由于您已经同时使用单引号和双引号,因此您需要转义引号。在这种情况下,模板化或使用 HTML,然后插入 PHP 变量会使事情变得更容易。

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

【讨论】:

  • 是的,这行得通。非常感谢您解决了我的问题!
【解决方案2】:

如果你没有在引号中使用字符串,它将被视为一个变量。你应该在函数中用引号发送字符串,下面是不正确的方式

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

正确的方法如下

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

【讨论】:

    【解决方案3】:

    ReferenceError: landmark403 is not defined 表示 js 认为您尝试使用变量 landmark403 。 所以我想如果你使用撇号会有所帮助。

    有点像:

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

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

    【讨论】:

      最近更新 更多