为什么我不能把这个变量传递给javascript函数?

时间:2009-11-11 17:22:59

标签: php javascript html

我的php文件中有一个变量,每当用户点击我的php页面上的链接时,我想传递给javascript函数。

这里是php简介:

$delete_img=$image_id.'_'.$newfilename;
$display_image.="<td><img src='../temp_images/$newfilename'>";
if ($i==$extra_pic){ 
$display_image.="<br><a href='#' onclick='window.parent.reset_imageform($i, $delete_img);'>delete picture</a></td>";}

“if($ i == $ extra_pic)为真,所以不要介意......

问题是,如果你点击链接'删除图片',应该调用函数reset_imageform(nr,pic_nr),但每当我尝试将变量$ delete_img传递给函数时它都不会。 一旦我从调用中删除此变量,就像这个'reset_imageform($ i);'然后它工作。但添加该变量将使其无法工作。 函数根本没有被调用!

变量包含一个随机id nr,带有下划线,然后是文件名,例如:23432423439_picture.jpg

我有什么东西在这里丢失了,我应该在$ delete_img做些什么之后再发送它吗?

我的所有文件都是utf-8格式!

由于

PS:如果您需要更多输入,请告诉我......

3 个答案:

答案 0 :(得分:5)

因为它是一个字符串,你需要引用它。

正确的方法是这样的:

$display_image.='<br><a href="#" onclick="window.parent.reset_imageform(' . $i . ', '
    . htmlspecialchars(json_encode($delete_img))
    . ');">delete picture</a></td>';

我已经交换了引号,使其适用于任何字符串;否则,如果你在其他地方使用它,而字符串包含撇号,则无效。交换引号的替代方法是将ENT_QUOTES传递给htmlspecialchars()

你说$i对它有效,所以我假设$i是一个整数 - 所以它不需要引用。

答案 1 :(得分:3)

如果您将字符串传递给JavaScript函数,则必须正确引用它:

所以没有php,它看起来像:

<br><a href='#'
  onclick='window.parent.reset_imageform(5, "23432423439_picture.jpg");'>
    delete picture</a></td>

因此,要获得生成的HTML,您需要包含引号:

$display_image.="<br><a href='#'
  onclick='window.parent.reset_imageform({$i}, \"{$delete_img}\");'>
    delete picture</a></td>";

我们这里有多个级别的引号,因此23432423439_picture.jpg周围的双引号需要转义,例如\"

答案 2 :(得分:3)

当遇到Javascript问题时,不要查看生成它的服务器端代码,而是查看最终输出(在webbrowser中右键单击页面并选择“查看源代码”左右)并专注于生成的JS代码。这样你就应该更快地发现JS字符串变量周围缺少的引号。