JavaScript中的多行警告

38
这段代码

alert("Hello again! This is how we" + "\n" + "add line breaks to an alert box!");

代码不起作用。 Firefox的JavaScript控制台将错误命名为“未终止的字符串字面量”,并在\n之前的“符号上进行标注。 我想用多行文本触发警报。请不要使用jQuery。


1
有问题的代码不是那段代码。请注意,语法错误信息几乎总是具有误导性。 - Esailija
当我在这行前面加上//时,一切都正常工作。 - Pave
7
不过,如果你将那段代码孤立地运行,它将正常工作,我刚刚测试过了。请提供更多的代码。 - Esailija
这个警告在函数中触发: function FCKeditor_OnComplete(editorInstance) {alert("你好!这就是我们如何" + String.fromCharCode(10) + "向警告框添加换行符!");} - Pave
在添加了缺少的 } 后,该函数运行正常。 - Esailija
这不是问题,但 "\n" 不需要分开,只需说 "...我们如何添加行..." - nnnnnn
12个回答

64

没测试过,但这个可行吗?

alert("Hello again! This is how we \n add line breaks to an alert box!");

25

这正是我经历过的...确切地说,我需要将其更改为\\n而不是\n

alert("Hello again! This is how we"+"\\n"+"add line breaks to an alert box!");

1
谢谢,只有当所有的 JavaScript 代码作为字符串从服务器端传递时,这种写法才是正确的。例如:"alert('再见!这就是我们如何'+'\n'+'在警告框中添加换行符!');"; --> 使用 \n 换行才能生效,否则会失败。 - FabianSilva
1
不,\n 独自使用是正确的。如果你把它放进另一个字符串中(比如当你执行 echo "alert('x\ny');" 时),结果会变成 alert('x[linebreak]y');,这是错误的。你必须用 \n 来进行双重转义,但这与 JavaScript 没有任何关系。 - StanE

7

这个问题很老,但我想给出一个清晰的答案,并解释为什么会发生这种情况,以帮助其他人:

首先,问题中的JavaScript代码行没有任何问题。它是完全有效的,不会产生任何解析错误。Vitalmax遇到问题的原因很可能是他/她没有发布包围该行代码的其他代码。

这里有一个PHP示例,展示了为什么JS解析器会抱怨语法:

<?php
  echo "alert('Hello again! This is how we\nadd line breaks to an alert box!');";
?>

解析后的服务器端输出如下(这就是浏览器收到的内容):
alert("Hello again! This is how we
add line breaks to an alert box!");

在JavaScript中,字符串不能有真正的换行符。相反,它们必须始终被转义(例如:\n),这样浏览器就会在真正的换行处报告“未终止的字符串文字”。有一些例外情况,例如对于水平制表符(\t)。因此,在这种情况下,您必须使用\\n两次转义换行符。因此,当PHP解析并将其从\\n转换为\n时,JavaScript可以将其从\n转换为[真正的换行]
正确的PHP示例应该是:
<?php
  echo "alert('Hello again! This is how we\\nadd line breaks to an alert box!');";
?>

或者:
<?php
  echo 'alert("Hello again! This is how we\nadd line breaks to an alert box!");';
?>

在第二种情况下,您不必进行双重转义,因为在单引号PHP字符串中转义的字符不会被解码(\n保持不变)。
*注意:可以使用特殊的引号符`,它允许JS中进行真正的换行。示例:
alert(`Hello again! This is how we
add line breaks to an alert box!`);

添加特殊字符串封装字符(`),支持真实换行。 - StanE

6

如果您正在服务器端呈现警报(即在网站上),则将更改\n\\n应该有效,但是如果您正在客户端运行(即测试等),只有\\n不起作用。例如,请尝试在网站上运行以下行。

alert("Hello again! This is how we"+"\n"+"add line breaks to an alert box!");

或者:

 alert("Hello again! This is how we" +"\\n" +"add line breaks to an alert box!");

在jsfiddle中,第一个例子有效是因为它在客户端运行,但如果在服务器端运行,则需要双斜杠(\\n)。我不确定原因,但我已经多次测试过。
希望这可以帮助你!

1
这个脚本对我来说有效。
<script>
  alert("Hello. \r\n How are you?");
</script>

1
<script>
alert("Hello. \n How are you?")
</script>

1
欢迎来到Stack Overflow!虽然这段代码可能解决了问题,但包括解释真的有助于提高您的帖子质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您建议代码的原因。请尽量不要在代码中加入过多的解释性注释,因为这会降低代码和解释的可读性! - Blue

1

错误 "语句前缺少分号" 这告诉我这行代码上方缺少分号。通常的语法陷阱是没有正确关闭圆括号或花括号的 if 语句。


0

使用单引号。

alert("Hello again! This is how we"+'\n'+"add line breaks to an alert box!");

0

警告("再次你好!这就是我们如何" + "\n" + "在警告框中添加换行符!");

\n --> 这个有效 使用 \n 工作

\n --> 不起作用,它只是将其视为连续的警告消息字符串 不使用 \n 工作


你的格式不太清晰,不太明白你的意思。你可以像问题作者一样,在JavaScript片段中包装你的代码示例,以便让人们更容易地理解差异。 - Johan
谢谢@Johan,实际上我完全是新手在Stack Overflow上,我试图插入输出图像以区分我尝试解释但未能做到的两件事情。但现在我知道如何使用代码片段了。非常感谢。 - Lalit Dubey
没问题,分享你的解决方案是一个非常棒的举措! - Johan

0
另一种方法是使用 String.fromCharCode()
alert("This unit has been removed from stock" + String.fromCharCode(13) + " Do you wish to RETURN this unit to stock?");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接