JavaScript:SyntaxError:missing)

时间:2014-03-09 18:37:02

标签: javascript syntax

我在JS中调用了简单的PHP函数:

var text = document.createTextNode("<?php get_parts(); ?>");

函数从db返回一些选项标记。

var text = document.createTextNode
("
<option selected=\'selected\' value = '0'>vyber partii</option>
<option value="1">ramena</option><option value="2">prsa</option>
<option value="3">zada</option><option value="4">ruce</option>
<option value="5">bricho</option><option value="6">nohy</option>
");

在控制台中检查时,它会在参数列表后面显示:SyntaxError:missing),指向第二个选项标记的参数。 value =“1”&lt; ------ here

任何人都可以解释一下,这是怎么回事?我没有看到任何语法错误。

5 个答案:

答案 0 :(得分:1)

两件事:

  1. 如果不在换行符之前使用\,则不能跨越这样的行。 (换行不会出现在结果字符串中。)

  2. 即使你可以,你在引用的材料中使用" 也需要逃脱(使用\)。 (或者在整个字符串周围使用',因为您没有在内容中使用这些字符串。)

  3. 所以:

    var text = document.createTextNode
    ("\
    <option selected=\"selected\" value=\"0\">vyber partii</option>\
    <option value=\"1\">ramena</option><option value=\"2\">prsa</option>\
    <option value=\"3\">zada</option><option value=\"4\">ruce</option>\
    <option value=\"5\">bricho</option><option value=\"6\">nohy</option>\
    ");      
    

    请注意新行之前的\,以及嵌入的"字符之前。

    我可能不会那样使用新行,它很脆弱。我会做这样的事情:

    var text = document.createTextNode
    ('<option selected="selected" value="0">vyber partii</option>' +
     '<option value="1">ramena</option><option value="2">prsa</option>' +
     '<option value="3">zada</option><option value="4">ruce</option>' +
     '<option value="5">bricho</option><option value="6">nohy</option>'
    );
    

    旁注:我假设您创建文本节点的原因是您希望按原样输出此文本;也就是说,没有它被视为标记。但如果情况并非如此,请注意即将发生的事情(<option...></option>内容实际上是文本节点内的文本,而不是选项元素。)

    如果您正在尝试创建实际的选项元素,通常最好使用Option构造函数;然后在add元素的select伪阵列上使用options将它们添加到它(您认为它将是push,但它不是一个数组,{ {1}}更可靠的跨浏览器):

    add

答案 1 :(得分:0)

<option value="1">和其他人中你有引号。

您需要转义字符串中的每个引号,或使用单引号

答案 2 :(得分:0)

使用\反斜杠转义"双引号

var text = document.createTextNode
("
<option selected=\'selected\' value = '0'>vyber partii</option>
<option value=\"1\">ramena</option><option value=\"2\">prsa</option>
<option value=\"3\">zada</option><option value=\"4\">ruce</option>
<option value=\"5\">bricho</option><option value=\"6\">nohy</option>
");

使用'单引号

var text = document.createTextNode
("
<option selected='selected' value='0'>vyber partii</option>
<option value='1'>ramena</option><option value='2'>prsa</option>
<option value='3'>zada</option><option value='4'>ruce</option>
<option value='5'>bricho</option><option value='6'>nohy</option>
");

在Javascript中,您不能将字符串文字分成多行,例如上面的代码示例。您还需要使用反斜杠\来转义它。

错误

var s = "Hello 
         World";

确定

var s = "Hello\
         World";

答案 3 :(得分:0)

这对我有用:)

function get_parts(){

    $txt = "<option selected='selected' value = '0'>vyber partii</option>";
    $txt .= "<option value='1'>ramena</option>";
    $txt .= "<option value='2'>prsa</option>";
    $txt .= "<option value='3'>zada</option>";
    $txt .= "<option value='4'>ruce</option>";
    $txt .= "<option value='5'>bricho</option>";
    $txt .="<option value='6'>nohy</option>";
    return $txt;
}

?>
<script type="text/javascript">
var text = document.createTextNode("<?php echo get_parts(); ?>");
console.log(text.data);
</script>

答案 4 :(得分:-1)

你必须逃避行情。

var text = document.createTextNode
("
<option selected=\"selected\" value=\"0\">vyber partii</option>
<option value=\"1\">ramena</option><option value=\"2\">prsa</option>
<option value=\"3\">zada</option><option value=\"4\">ruce</option>
<option value=\"5\">bricho</option><option value=\"6\">nohy</option>
");