【问题标题】:Multi-line alert in JavascriptJavascript中的多行警报
【发布时间】: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)+"在警报框中添加换行符!");
  • 该功能缺失},但添加后工作正常

标签: javascript alert


【解决方案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!");
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-05-22
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多