0

現在、クリックすると新しいウィンドウが開くはずのボタンがありますが、次のエラーが発生しますUncaught SyntaxError: Unexpected token :。使ってますwindow.open()

$url = "http://www.google.com";
$button .= 
'<input type="button" value="Print Timetable" class="printButton" onclick="window.open('.$url.');"/>';

パラメータなしでwindow.open()を使用すると機能することに気づきましたが、$url変数を渡すとすべての地獄が解き放たれます。構文エラーが発生します。私はhttp://www.google.com、www.google.com、google.comを試しましたが無駄になりました!

よろしくお願いします!

4

3 に答える 3

5

URL文字列をカプセル化するために必要な一重引用符が欠落しているためです。

$url = "http://www.google.com";
$button .= 
'<input type="button" value="Print Timetable" class="printButton" onclick="window.open(\''.$url.'\');"/>';

文字列のカプセル化のレイヤーを追加しています。文字列値を関数に渡すときは、文字列であるため、引用符で囲む必要があります。

doSomething('http://www.ibm.com/');

HTMLでこれをインラインで実行する場合は、JavaScriptを二重引用符で囲んでカプセル化する必要があります。

onclick="doSomething('http://www.ibm.com/');"; 

次に、PHPでそれをエコーし​​たり、変数として割り当てたりする場合は、すべてを引用符で囲む必要があります。これにより、次のことが可能になります。

<?php 
    //encapsulate in double quotes and escape double quotes
    echo " onclick=\"doSomething('http://www.ibm.com/');\" "; 

    //encapsulate in single quotes and escape single quotes
    echo ' onclick="doSomething(\'http://www.ibm.com/\'); '; 
 ?>  

どのように分解しても、3つの文字列カプセル化を相互に埋め込む必要があるため、JSで使用される引用符とPHPで使用される引用符を区別する方法を見つける必要があります。

そうしないと、問題が発生します。

<?php 

    //Houston We have a problem!
    echo " onclick="doSomething('http://www.ibm.com/');\" "; 
         ^         ^                                    ^ ^
 Open Quote       Close Quote                  Open Quote Close Quote 
 ?>  
于 2012-05-03T12:58:03.817 に答える
1

ここで間違っていることがいくつかあります。

等しい前にピリオド文字があります。例:

$button .= 

する必要があります

$button =

そして、一重引用符をエスケープする必要があります。

$url = "http://www.google.com";
$button = '<input type="button" value="Print Timetable" class="printButton" onclick="window.open(''.$url.'');"/>';
于 2012-05-03T13:00:35.217 に答える
0

私はそれがこのようになると思います:

$url = "http://www.google.com";
$button .= 
'<input type="button" value="Print Timetable" class="printButton" onclick="window.open("'.$url.'");"/>';

window.open()には引用符または二重引用符が必要です

于 2012-05-03T12:59:51.913 に答える