php
  • javascript
  • window.open
  • 2012-05-03 41 views 0 likes 
    0

    我目前有一个按钮,当点击它应该打开一个新窗口,但我得到这个错误:Uncaught SyntaxError: Unexpected token :。我使用的window.open()为什么Javascript中的onclick事件处理程序不工作?

    $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无济于事!

    感谢您的帮助提前!

    +1

    后,您在浏览器中得到 – Shyju

    回答

    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级封装,所以你必须找到一种方式来DIF在JS中使用的引号和PHP中使用的引号之间进行区分。

    否则你会有问题。

    <?php 
    
        //Houston We have a problem! 
        echo " onclick="doSomething('http://www.ibm.com/');\" "; 
         ^  ^        ^^ 
    Open Quote  Close Quote     Open Quote Close Quote 
    ?> 
    
    +0

    感谢这个工作:)只是花了2个小时这个HTML。语法错误总是让我在web开发中。该死的! 但我不明白为什么我必须逃避它。我认为是因为它是Javascript?因为当我在我的PHP文件中编写HTML时,不必转义任何内容,例如$ content ='div class =“'。$ classname。'”> –

    +0

    @JohnathanAu - 因为您正在向'window.open'函数传递'string'。最初,你试图做的是'window.open(http://google.com)',这是错误的没有引号。 –

    +1

    查看我上面的更新回复。总结,如果你想在php中回显一个引用,你需要转义它。 'echo'\“”;'产生'''''和'echo'\'';'产生'''。您传递的URL是一个字符串,因此它需要JS级别的引号。 – Dutchie432

    0

    我认为它想是这样的:

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

    window.open()要求报价单或双引号

    +0

    由于使用双引号封装了函数文本,因此这也不起作用 - 您也不能将它们用于函数参数。 – Dutchie432

    1

    有几件事错在这里:

    您在等于之前有句点字符,例如

    $button .= 
    

    $button = 
    

    而你需要逃避你的单引号:

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