2016-05-27 40 views
2

不知何故,我的php函數創建了一個調用javascript函數的按鈕,但它並沒有將php變量作爲字符串傳遞。將PHP變量作爲字符串傳遞給javascript

function addTableEntry($id, $name) 
{ 
    echo('<tr> 
       <td>'.$id.'</td> 
       <td>'.$name.'</td> 
       <td><a href="#groups" onClick="activateGroupSettingsOverlay('.$id.','.$name.')">Manage group</a> 
       </tr>'); 
} 

addTableEntry(1,"livingroom"); 

功能activateGroupSettingsOverlay()時,它被點擊,我得到一個錯誤「客廳是未定義」總是被調用(1,客廳)。

如何將$ name作爲字符串傳遞?我試圖把引號圍繞它(是這樣的:'.$id.',"'.$name.'",但沒有奏效

+5

'的onClick =「activateGroupSettingsOverlay( '的$ id '\''。$名字。」 \')''重要的是'\\'之前的引號來逃避它! – Jeff

+0

您的回答對我有用,謝謝傑夫! – Fynn

+0

然後,我會回答 – Jeff

回答

6

如果您希望它們持續存在,您必須在字符串內」轉義「引號:

echo '..... onClick="activateGroupSettingsOverlay('.$id.',\''.$name.'\')"....' 

重要的是(單)引號之前的反斜槓。

0

變化

onClick="activateGroupSettingsOverlay('.$id.','.$name.')" 

onClick="activateGroupSettingsOverlay('.$id.',"'.$name.'")" 
+4

對不起,但那會失敗(在html-parser中)! – Jeff

+2

正如我在我的文章中提到的,我已經嘗試過,並沒有工作 – Fynn

+2

@Fynn:嘗試我的評論然後... – Jeff

0

@chandresh_cool是一種權利,你必須「強制「的報價

onClick="activateGroupSettingsOverlay('.$id.',\''.$name.'\')" 
3

它不工作的原因是因爲你沒有在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 <<<HTMLHTML;<<<'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; 
+0

感謝您的詳細HEREDOCs的解釋和建議,我會研究它! – Fynn

+0

肯定的事情,我看到其他答案沒有真正解釋問題,這是整個給一個人一條魚或教他爲自己釣魚的事情。我寧願花時間來解釋這個問題,然後盲目地提供一個答案。 – ArtisticPhoenix

1
Please try with this code:- 

function addTableEntry($id, $name) 
{ 
    echo("<tr> 
       <td>".$id."</td> 
       <td>".$name."</td> 
       <td><a href=\"#groups\" onClick=\"activateGroupSettingsOverlay($id,'$name')\">Manage group</a> 
       </tr>"); 
} 

addTableEntry(1,"livingroom");