我在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
任何人都可以解释一下,这是怎么回事?我没有看到任何语法错误。
答案 0 :(得分: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>\
");
请注意新行之前的\
,以及嵌入的"
字符之前。
我可能不会那样使用新行,它很脆弱。我会做这样的事情:
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>
");