为什么我的onclick事件处理程序在Javascript中不起作用?

时间:2012-05-03 12:55:26

标签: php javascript window.open

我点击它时当前有一个按钮,它应该会打开一个新窗口,但我收到此错误: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无效!

提前感谢您的帮助!

3 个答案:

答案 0 :(得分: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 
 ?>  

答案 1 :(得分:1)

这里有一些问题:

你在等于之前有一个句号,例如

$button .= 

应该是

$button =

你需要逃避单引号:

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

答案 2 :(得分:0)

我认为它应该是这样的:

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

window.open()需要引用或双引号