2017-10-11 99 views
1

我正在研究一个有表格的项目。在该表中是里程碑和里程碑的一部分。传递给JS函数的PHP变量不起作用

这是我的代码:

<?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'.$milestone[0]['milestone_id']. ','.$milestone[0]['milestone_id'].');" but that variable does not send to my JS function.

我的第一个参数是点击里程碑(例如“milestone403”) 的名字和我的第二个参数是点击里程碑的ID(例如:'403')。

但我的控制台日志中说:

ReferenceError: milestone403 is not defined

这是我的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函数??任何人都可以帮助我解决这个问题,或者有任何解决方案。

+3

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

回答

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>'; 
+0

是的,这工作。我非常感谢你解决我的问题! – Haffoo

+0

非常欢迎! – aynber

0

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

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>'; 
0

的ReferenceError:未定义milestone403意味着爵士认为你试图用变量milestone403。 所以我觉得它会帮助,如果你使用撇号它会有所帮助。

somethink像:

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

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