Javascript中的多行警报

Posted

技术标签:

【中文标题】Javascript中的多行警报【英文标题】:Multi-line alert in Javascript 【发布时间】:2012-03-09 13:25:45 【问题描述】:

这段代码

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

不起作用。 Firefox javascript 控制台将错误命名为“未终止的字符串文字”并指向 \n 之前的“符号。 我想用多行文本触发警报。请不要使用 jQuery。

【问题讨论】:

有问题的代码不是那段代码。请注意,语法错误消息几乎总是具有误导性 当我在此行之前添加 // 一切正常 不过,如果你单独运行该代码,它会正常工作,我只是测试了它。请提供更多代码。 此警报在函数 function FCKeditor_OnComplete( editorInstance ) alert("Hello again! This is how we"+String.fromCharCode(10)+"在警报框中添加换行符!"); 该功能缺失,但添加后工作正常 【参考方案1】:

我遇到了 \n 和 \n 不起作用的问题,然后我尝试使用 html 中断标记,即 ,因为该面板是用 html 编写的并且可以正常工作。

示例 -

some text here <br> some more text

输出:

some text here
some more text

【讨论】:

【参考方案2】:

问题很老,但我想给出一个明确的答案并解释为什么会发生这种情况:

首先,问题中的 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转换为[real line break]

正确的 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 保持 \n)。

*注意:可以使用特殊的引号 `,它允许在 JS 中进行真正的换行。示例:

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

【讨论】:

添加了特殊字符串封装字符(`)的注释,支持真正的换行符。【参考方案3】:

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

\n --> 这是有效的 working with \n

\n --> 不起作用,它只是将其视为连续的警报消息字符串 does not working with \n

【讨论】:

您的格式不太清楚您的意思,您可以将代码包装在 JavaScript sn-p 中作为示例(正如作者在问题中所做的那样),以使人们更容易了解有什么区别。 感谢@Johan,实际上我对堆栈溢出完全陌生,我试图插入输出图像以区分我试图解释但未能这样做的两件事。但现在我知道如何使用 sn-p。非常感谢 没问题,分享您的解决方案是一个很棒的举措!【参考方案4】:

另一种方式是使用String.fromCharCode():

alert("This unit has been removed from stock" + String.fromCharCode(13) + " Do you wish to RETURN this unit to stock?");

【讨论】:

【参考方案5】:

我建议的更实用的方法是定义自己的 print() 函数,而忘记手动为每一行添加 \\n

//define
var print = new Function("var lines=arguments[0]+'\\n';; for(var i=1;i<arguments.length;i++)lines+=arguments[i]+'\\n'; alert(lines);");
    
//call
print("say","hello","to","javascript","this","is ","awesome");

现在您可以使用多个参数调用print(),每个参数将在单独的行中可用。

【讨论】:

【参考方案6】:

这个脚本适合我。

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

【讨论】:

【参考方案7】:
<script>
alert("Hello. \n How are you?")
</script>

【讨论】:

欢迎来到 Stack Overflow!虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要用解释性 cmets 挤满你的代码,因为这会降低代码和解释的可读性!【参考方案8】:

如果您正在呈现警报服务器端(即:在网站上),将 \n 更改为 \\n 应该可以工作,但如果您正在运行客户端(即:测试等),那么 \\n 将不起作用工作。例如,尝试在this 网站上运行以下行。

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) 我不确定这是为什么,但我已经测试过了多次。

希望这会有所帮助!

【讨论】:

【参考方案9】:

使用单引号。

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

【讨论】:

【参考方案10】:

这只是发生在我身上……完全正确。我需要将其更改为 \\n 而不是 \n

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

【讨论】:

谢谢,当所有 javascript 代码作为字符串来自服务器端时,这是正确的,例如:“alert('Hello again!This is how we'+'\\n'+'add line打破警报框!');"; --> 使用 \\n 换行符有效,否则失败。 不,只有 \n 是正确的。如果你把它放到另一个字符串中(比如当你做一个 echo "alert('x\ny');";),结果将是一个 alert('x[linebreak]y');,这是不正确的。您必须使用 \\n 对其进行双重转义,是的,但这与 JavaScript 无关。【参考方案11】:

error "missing ; before statement" 这告诉我这行代码上方缺少分号。通常的语法 gotchya 是没有正确关闭括号的 if 语句。或者花括号。

【讨论】:

【参考方案12】:

还没有测试过,但这有效吗?

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

【讨论】:

以上是关于Javascript中的多行警报的主要内容,如果未能解决你的问题,请参考以下文章

如果浏览器是IE6警报

我想用javascript编写这样一个条件,如果用户通过谷歌浏览器进入我的网站,发出警报或执行任何操作[重复]

JavaScrip对象

JavaScrip和Java一样吗?

使用 javascript 到 php 的表单验证

Javascript 警报中的文本颜色