2014-02-10 28 views
0

如果我尝试将PHP数组元素作为参数传递,我无法调用Javascript函数。 我试过所有的东西(除了正确的东西,我想)。无法将PHP变量传递给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()框出现的事实显示了onclick()正在工作的100%确定性。

,这里是失败的原因:当我点击文本的浏览器窗口中的行:

**does not work!** 

- 这是试图通过theRow [11]作为参数showIt() - 在showIt()中没有出现提示框。

我想“好吧,这是一个引用问题。”

所以我尝试了这些无济于事:这里成功MY引用尝试

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

NONE。

如何正确引用的代码行:)

$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> 
+0

你能发布生成的html代码(不是屏幕输出)吗? –

+1

打开javascript调试器,看看是否有错误。 – Aris

+0

@KristenJukowski我在原始问题的末尾添加了“查看源代码”输出。 – CFHcoder

回答

2

首先一个提示:是易于阅读,如果你追加以字符串:$htmlBuffer .= "Something else";如果你是100%肯定的$theRow[11]内容是字符串"52e43c33"这个版本将是相当于$htmlBuffer = $htmlBuffer . "Something else";

合作:

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

最重要的部分是,你正在使用',所以你必须确保引用的JavaScript字符串的的PHP内容0不能有任何'。易于使用'引用javascript参数字符串,因为您打开的HTML属性为"。删除您尝试的其他行,因为这可能会导致不平衡的引号。

检查浏览器(使用view-source:URL)的输出效果,必须看到:

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

工作。我以为我已经尝试过这种顺序** \ **。然而,我不明白为什么**会失败,但事实并非如此,谢谢Emilio。 – CFHcoder

1

如何一点点Heredoc避免一切讨厌的报价/转义?

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

谢谢。我很沮丧的原因是我对引用或heredocs并不陌生。我要弄清楚为什么我原来的代码不工作,因为我需要填补我所拥有的知识空白。我喜欢heredocs。尽管这里没有使用 - 我决心弄清楚我的代码的调整是为了拓宽我的引用知识。 – CFHcoder

+1

老实说你的第一次尝试看起来对我来说是正确的(“我是这样试试”)。回到那个,看看生成的HTML,如果它仍然不起作用,可能会将它添加到问题中。 –

+0

谢谢。我认为我在报价时体面。这个是踢我的azz。我在这个简单的事情上已经4个小时了。我尝试过的一些不同的尝试,我从过去的经验我知道应该工作,但他们没有。 – CFHcoder

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> 

以及我没有检查这一点,但它一直为我工作这条路。

祝您好运!