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

Joh*_* Au 0 javascript php 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.');"/>';
Run Code Online (Sandbox Code Playgroud)

我注意到当我使用没有参数的window.open()时它可以工作,但是当我传入$url变量时,所有地狱都会松动.我得到语法错误.我试过http://www.google.com,www.google.com和google.com都无济于事!

感谢您的帮助!

Dut*_*432 5

因为您缺少封装url字符串所需的单引号.

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

你正在添加一层字符串封装.将字符串值传递给函数时,它必须是引号,因为它是一个字符串.

doSomething('http://www.ibm.com/');
Run Code Online (Sandbox Code Playgroud)

当您在html中内联时,需要将javascript封装在双引号中,以便它成为

onclick="doSomething('http://www.ibm.com/');"; 
Run Code Online (Sandbox Code Playgroud)

然后,如果您希望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/\'); '; 
 ?>  
Run Code Online (Sandbox Code Playgroud)

无论你如何分解,你都需要将3个字符串封装在一起,所以你必须找到一种方法来区分JS中使用的引号和PHP中使用的引号.

否则你会遇到问题.

<?php 

    //Houston We have a problem!
    echo " onclick="doSomething('http://www.ibm.com/');\" "; 
         ^         ^                                    ^ ^
 Open Quote       Close Quote                  Open Quote Close Quote 
 ?>  
Run Code Online (Sandbox Code Playgroud)