2014-02-10 29 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> 

以及我沒有檢查這一點,但它一直爲我工作這條路。

祝您好運!