它不工作的原因是因爲你沒有在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;
'的onClick =「activateGroupSettingsOverlay( '的$ id '\''。$名字。」 \')''重要的是'\\'之前的引號來逃避它! – Jeff
您的回答對我有用,謝謝傑夫! – Fynn
然後,我會回答 – Jeff