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中的多行警报的主要内容,如果未能解决你的问题,请参考以下文章