无法将PHP变量传递给javascript函数

时间:2014-02-10 18:47:04

标签: javascript php html quoting

如果我尝试将PHP数组元素作为arg传递,则无法调用Javascript函数。 我已经尝试了所有的东西(除了正确的东西,我想)。

这是PHP代码 - 第二行是失败的:

var_dump($theRow[11]);
$htmlBuffer = '<div onclick="showIt(' . $theRow[11] . ')">does not work!</div>';
$htmlBuffer = $htmlBuffer . '<div onclick="showIt()"> THIS WORKS FINE! </div>';

以下是输出上述代码的HTML代码:

<html>
   <body>
      <?php echo '<div id="listSection">' . $htmlBuffer . '</div>'; 
      ?>
    </body>
</html>

这是javascript函数'showIt()':

function showIt(theVal)
{
   alert("HERE IS WHAT WAS PASSED IN: " + theVal);              
}

以下是页面上的输出:

1)首先,我在页面上看到了这一点:

string(8) "52e43c33" 

现在,这是100%罚款。这就是我期望在阵列位置#11看到的。 请注意,'theRow [11]'是一个PHP数组,其中每个数组元素都是一个8位(十六进制)数字。并且var_dump()调用显示位置11的数组元素是一个有效的8位(十六进制)数字,这就是我期望在那里找到的数字。这没关系。

2)然后我在页面上看到了这一点:

does not work!  
THIS WORKS FINE!

当我点击“这个工作很精细!”在我的网页上,我看到一个警告框,上面写着:

HERE IS WHAT WAS PASSED IN: undefined

现在我没关系。我没有将showIt()的参数传递给我点击的代码行。出现alert()框的事实显示100%确定onclick()正在运行。

此处是失败:当我点击浏览器窗口中的文本行时:

**does not work!**  

- 尝试传递theRow [11]作为showIt()的参数 - 在showIt()中调用的警告框不会出现。

我认为“好吧这是一个引用问题。”

所以我试过这些无济于事:

$htmlBuffer = '<div onclick="showIt(\'' . $theRow[11] . '\')">does not work!</div>';
$htmlBuffer = '<div onclick="showIt(\"' . $theRow[11] . '\")">does not work!</div>';
$htmlBuffer = '<div onclick="showIt("' . $theRow[11] . '")">does not work!</div>';
$htmlBuffer = '<div onclick="showIt($theRow[11])">does not work!</div>';

我的引用尝试没有成功。

如何正确引用代码行:

$htmlBuffer = '<div onclick="showIt(' . $theRow[11] . ')">does not work!</div>';

让theRow [11]成功传递给showIt()?

编辑:这是页面的“查看来源”:

string(8) "7ab79992"
<!DOCTYPE html>
<html>
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     <script type="text/javascript">
       function showIt(theVal)
       {
         alert("HERE IS WHAT WAS PASSED IN: " + theVal);              
       }
    </script>
  </head>
  <body>  
    <div id="listSection"><div onclick="showIt(7ab79992)">does not work!</div>
    <div onclick="showIt()"> THIS WORKS FINE! </div></div>
  </body>
</html>

3 个答案:

答案 0 :(得分:2)

首先提示:如果您附加的字符串:$htmlBuffer .= "Something else";等同于$htmlBuffer = $htmlBuffer . "Something else";

,则很容易阅读

如果您100%确定$theRow[11]的内容是字符串"52e43c33",则此版本将有效:

$htmlBuffer = '';
$htmlBuffer .= '<div onclick="showIt(\'' . $theRow[11] . '\');">does not work!</div>';

重要的是,您使用'引用了javascript字符串,因此您必须确保$theRow[11]的php内容不得包含任何'。易于使用'引用javascript参数字符串,因为您使用"打开HTML属性。删除您正在尝试的其他行,因为这可能会导致报价不平衡。

检查浏览器的输出(使用view-source:URL),您必须看到以下内容:

<div onclick="showIt('52e43c33');">does not work!</div>

答案 1 :(得分:1)

Heredoc如何避免所有令人讨厌的引用/逃避?

$htmlBuffer = <<<EOD
<div onclick="showIt('$theRow[11]')">does not work!</div>
EOD;

答案 2 :(得分:1)

试试这个:

 <html>
 <body>

   <div id="listSection">
     <div onclick="showIt(<? echo $theRow[11] ; ?>)">does not work!
     </div>
   </div>
   <!--and this too-->
   <!--<?php echo "<div id="listSection"><div onclick=".'"'."showIt($theRow[11]".'"'.">does not work!</div>" ; ?>-->

 </body>
 </html>
好吧,我没有检查过这个,但它一直对我有用。

祝你好运!!