【问题标题】:Why doesn't my onclick event handler in Javascript work?为什么我在 Javascript 中的 onclick 事件处理程序不起作用?
【发布时间】:2012-05-03 12:55:26
【问题描述】:

我目前有一个按钮,单击它应该会打开一个新窗口,但我收到此错误: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 无济于事!

提前感谢您的帮助!

【问题讨论】:

  • 发布您在浏览器中获得的 HTML

标签: php javascript window.open


【解决方案1】:

因为您缺少封装 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 
 ?>  

【讨论】:

  • 感谢这个工作:) 刚刚花了 2 个小时。语法错误总是让我进入 Web 开发。该死的!但我不明白为什么我必须逃避它。我假设是因为它是 Javascript?因为当我在我的 PHP 文件中编写 HTML 时,不必转义任何东西,例如$content = 'div class="'.$classname.'">
  • @JohnathanAu - 因为您将string 传递给window.open 函数。最初,您尝试做的是window.open(http://google.com),没有引号是错误的。
  • 请参阅上面的更新回复。总结,如果你想在 php 中回显一个引号,你需要转义它。 echo "\""; 产生 " ... 和 echo '\''; 产生 '。您传递的 URL 是一个字符串,因此它需要 JS 级别的引号。
  • 干杯伙伴,太棒了。
【解决方案2】:

这里有几个问题:

等号前有句号,例如

$button .= 

应该是

$button =

你需要转义你的单引号:

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

【讨论】:

    【解决方案3】:

    我觉得应该是这样的:

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

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

    【讨论】:

    • 这也不起作用,因为双引号被用来封装函数文本 - 你也不能将它们用于函数参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-02
    • 2014-04-16
    • 1970-01-01
    • 2018-11-22
    相关资源
    最近更新 更多