不知何故,我的php函数创建了一个调用javascript函数的按钮,它不会将php变量作为字符串传递。
function addTableEntry($id, $name)
{
echo('<tr>
<td>'.$id.'</td>
<td>'.$name.'</td>
<td><a href="#groups" onClick="activateGroupSettingsOverlay('.$id.','.$name.')">Manage group</a>
</tr>');
}
addTableEntry(1,"livingroom");
函数activateGroupSettingsOverlay()
一旦被点击就会被(1,livingroom)调用,我得到一个错误“livingroom is undefined”。
如何将$ name作为字符串传递?我试图在它周围加上引号(例如:'.$id.',"'.$name.'"
,但这不起作用。
答案 0 :(得分:6)
你必须逃避&#34;如果您希望它们持久化,请在字符串中引用:
echo '..... onClick="activateGroupSettingsOverlay('.$id.',\''.$name.'\')"....'
重要的是(单个)引号之前的反斜杠。
答案 1 :(得分:3)
它无法正常工作的原因是因为你没有在javascript中加入引号。
虽然其他答案“修复”了这个问题并没有真正解释,但要明确这一行
<td><a href="#groups" onClick="activateGroupSettingsOverlay('.$id.','.$name.')">Manage group</a>
像这样输出
<td><a href="#groups" onClick="activateGroupSettingsOverlay(1,livingroom)">Manage group</a>
原样,livingroom
没有引号,因此javascirpt将其视为变量,因此未定义错误。要修复它,你希望它在输出时看起来像这样。
<td><a href="#groups" onClick="activateGroupSettingsOverlay(1,'livingroom')">Manage group</a>
修改此行就是您需要更改的内容
<td><a href="#groups" onClick="activateGroupSettingsOverlay('.$id.',\''.$name.'\')">Manage group</a>
使用转义添加单引号\'
。
就个人而言,我喜欢使用所谓的HEREDOC或NEWDOC
<<<HTML
HTML;
和<<<'HTML'
HTML;
各自。 HEREDOC就像使用"
而新文档就像使用'
一样,你不能在NEWDOC中使用php变量,但如果你将它们括在{ }
括号中,你可以在HEREDOC中使用。因此,我们想要使用HEREDOC,以便我们可以在输出中使用php变量。
function addTableEntry($id, $name)
{
echo <<<HTML
<tr>
<td>'.$id.'</td>
<td>'.$name.'</td>
<td><a href="#groups" onClick="activateGroupSettingsOverlay({$id},'{$name}')">Manage group</a>
</tr>
HTML;
}
addTableEntry(1,"livingroom");
http://php.net/manual/en/language.types.string.php - 向下滚动到HEREDOC
这样做的好处是你不必转义单引号,这使得IMO更具可读性。 HEREDOC或NEWDOC的诀窍是结尾HTML;
必须开始一个新行,并且可能是该行上唯一的东西,没有前导或尾随空格,或者它将无法正常工作..
对于这种情况,它可能很简单,可以逃避你如何做到这一点,但如果你需要在javascript中使用连接,引号将变得麻烦。例如,假设您想使用带有javascirpt变量的javascript为图像名称添加html图像标记,但使用php获取服务器主机名(html和javascript中的变量)。
echo '
var foo = "image.jpb";
$(body).html( \'<img src="'.$_SERVER['HTTP_HOST'].'\'+foo+\'" />\' );
';
这很快就变得难以管理,因为(不管怎样我都不确定是否有这个权利)。比较这是多么清洁,因为你没有在PHP中浪费报价......
echo <<<HTML
var foo = "image.jpb";
$(body).html( '<img src="{$_SERVER['HTTP_HOST']}'+foo+'" />' );
HTML;
答案 2 :(得分:1)
Please try with this code:-
function addTableEntry($id, $name)
{
echo("<tr>
<td>".$id."</td>
<td>".$name."</td>
<td><a href=\"#groups\" onClick=\"activateGroupSettingsOverlay($id,'$name')\">Manage group</a>
</tr>");
}
addTableEntry(1,"livingroom");
答案 3 :(得分:0)
更改
onClick="activateGroupSettingsOverlay('.$id.','.$name.')"
到
onClick="activateGroupSettingsOverlay('.$id.',"'.$name.'")"
答案 4 :(得分:0)
@chandresh_cool是对的,你必须&#34;强迫&#34;报价
onClick="activateGroupSettingsOverlay('.$id.',\''.$name.'\')"