【问题标题】:Why does "\n" create a new line even when told not to?为什么“\n”即使被告知不要创建一个新行?
【发布时间】:2016-05-16 21:00:21
【问题描述】:

我在“\n”创建行时遇到问题,即使在复制时被告知不要这样做。修复可能很简单,我只是出于某种原因看不到。我将不胜感激有关此问题的任何意见或指导。

(请只给我 Javascript 答案,因为我对 jquery 或其他方法不感兴趣)

       <script type="text/javascript">

        if (pullDownResponseE == "")
        {
        }
        else {
        var pullDownValuesE = document.getElementById("taskOne");
        var pullDownResponseE = pullDownValuesE.options[pullDownValuesE.selectedIndex].value;
        stuffToCopy = stuffToCopy + "\n" + pullDownResponseE;
        }


        if (pullDownResponseF == "")
        {
        }
        else{
        var pullDownValuesF = document.getElementById("taskTwo");
        var pullDownResponseF = pullDownValuesF.options[pullDownValuesF.selectedIndex].value;
        stuffToCopy = stuffToCopy + "\n" + pullDownResponseF;
        }

        </script>

如您所见,如果我的下拉值等于 "",pullDownResponseF 和 pullDownReponseE 应该什么都不做,并且这部分大部分工作,它不执行任何 else 代码,除了新行 "\n" 部分.

谁能解释这里出了什么问题?

编辑:拥有更多代码可能会有所帮助。由于篇幅太长,我只包括基本部分。

        <script type="text/javascript">

        function copyNotesTemplate()
        { 

        var stuffToCopy = document.getElementById('myForm').value;
        if(stuffToCopy.length > 1)
        {
        var stuffToCopy = "PT meets criteria" + "\n" + document.getElementById('myForm').value;
        }
        if(document.getElementById('noPtCriteria').checked)
        {
        var stuffToCopy = document.getElementById('noPtCriteria').value;
        }


        if (pullDownResponsee == "")
        {
        }
        else {
        var pullDownValuese = document.getElementById("taskOne");
        var pullDownResponsee = pullDownValuese.options[pullDownValuese.selectedIndex].value;
        stuffToCopy = stuffToCopy + "\n" + pullDownResponsee;
        }


        if (pullDownResponsef == "")
        {
        }
        else{
        var pullDownValuesf = document.getElementById("taskTwo");
        var pullDownResponsef = pullDownValuesf.options[pullDownValuesf.selectedIndex].value;
        stuffToCopy = stuffToCopy + "\n" + pullDownResponsef;
        }

        if (pullDownResponseg == "")
        {
        }
        else{
        var pullDownValuesg = document.getElementById("taskThree");
        var pullDownResponseg = pullDownValuesg.options[pullDownValuesg.selectedIndex].value;
        stuffToCopy = stuffToCopy + "\n" + pullDownResponseg;
        }

        var tempValues = document.getElementById('whatUpdate').value
        if(tempValues.length > 1) 
        {
        var stuffToCopy = stuffToCopy + "Updated" + " " + document.getElementById('whatUpdate').value + " ";
        }
        else{
        }

        var tempValuess = document.getElementById('whatInfo').value
        if(tempValuess.length > 1) 
        {
        var stuffToCopy = stuffToCopy + "per" + " " + document.getElementById('whatInfo').value + "\n";
        }
        else{
        }

        var tempValue = document.getElementById('whatDSCRP').value
        if(tempValue.length > 1) 
        {
        var stuffToCopy = stuffToCopy + document.getElementById('whatDSCRP').value + " " + "dscrp on Collection tube and trf was resolved using" + " ";
        }
        else{
        }


        var tempValue = document.getElementById('resolveIT').value
        if(tempValue.length > 1) 
        {
        var stuffToCopy = stuffToCopy + document.getElementById('resolveIT').value + " ";
        }
        else{
        }

        var tempValue = document.getElementById('tubeCorrect').value
        if(tempValue.length > 1) 
        {
        var stuffToCopy = stuffToCopy + "trf was" + " " + document.getElementById('tubeCorrect').value;
        }
        else{
        }


        if(stuffToCopy.length > 1)
        {
        var stuffToCopy = stuffToCopy + "\n" + document.getElementById('moreNotes').value;
        }
        else{
        }

        if (pullDownResponsesu == "")
        {
        }
        else{
        var pullDownValuesu = document.getElementById("mod33Apply");
        var pullDownResponsesu = pullDownValuesu.options[pullDownValuesu.selectedIndex].value;
        stuffToCopy = stuffToCopy + "\n" + pullDownResponsesu;
        }

        if (pullDownResponsesb == "")
        {
        }
        else{
        var pullDownValuesb = document.getElementById("resultICR");
        var pullDownResponsesb = pullDownValuesb.options[pullDownValuesb.selectedIndex].value;
        stuffToCopy = stuffToCopy + "\n" + pullDownResponsesb + "," + " ";
        }

        if (pullDownResponsesc == "")
        {
        }
        else{
        var pullDownValuesc = document.getElementById("moneyNCIS");
        var pullDownResponsesc = pullDownValuesc.options[pullDownValuesc.selectedIndex].value;
        stuffToCopy = stuffToCopy + pullDownResponsesc + " ";
        }

        if (pullDownResponsesd == "")
        {
        }
        else{
        var pullDownValuesd = document.getElementById("resultMMT");
        var pullDownResponsesd = pullDownValuesd.options[pullDownValuesd.selectedIndex].value;
        stuffToCopy = stuffToCopy + pullDownResponsesd;
        }


        if(stuffToCopy.length > 1)
        {
        var stuffToCopy = stuffToCopy + " " + "Reason:" + " " + document.getElementById('whyNotEligible').value;
        }
        else{
        }

        if (pullDownResponsesa == "")
        {
        }
        else{
        var pullDownValuesa = document.getElementById("testReleased");
        var pullDownResponsesa = pullDownValuesa.options[pullDownValuesa.selectedIndex].value;
        stuffToCopy = stuffToCopy + "\n" + pullDownResponsesa;
        }
        window.clipboardData.setData('text', stuffToCopy);
        }
        </script>

如果有人在此示例中跳过填写备注字段或跳过下拉菜单,则它不会像我预期的那样执行代码,但它会在复制时创建一个新行,如下所示:

taskOne 已选择

(由于未选择任务二,因此此处多出一行)

taskThree 已选择

如果跳过任务二,我希望任务一和三之间不要有多余的行。像这样:

taskOne 已选择

taskThree 已选择

注意:我知道 else {} 毫无意义,但它在视觉上对我有帮助。

我创建了从我的工具复制/粘贴时的样子的片段,如果您愿意,可以在此处查看:

示例 1:http://imgur.com/wGO5vnT

示例 2:http://imgur.com/UX1tG5S

这也是我的 html 示例:

<html lang="en">
  What tasks are needed for the case?
  <br />
  <select class="style3" id="taskOne">
  <option value=""></option>
  <option value="ABN needed">ABN needed</option>
  <option value="Auth needed">Auth needed</option>
  </select>
  </html>

【问题讨论】:

  • 在设置变量后尝试添加警报(变量)...它会告诉你它们是什么。您的代码并没有太大意义……我们很难弄清楚您要做什么。(这可能就是为什么有人不赞成它的原因……尝试将工作代码放入其中,然后您就可以了)会得到更多的回应)。欢迎来到!
  • 我只是想知道“\n”是否有理由在不应该的情况下创建一个新行。我可以编辑我的帖子以包含整个功能,但它非常长,并且认为它会让人们感到沮丧而不是它的帮助。我已经尝试过警报,但很遗憾它没有回答我的问题。
  • "它不执行任何 else 代码,除了新行 "\n" 部分" - 它不可能只执行最后一部分否则阻止。未显示的代码中一定还有其他事情发生。顺便说一句,为什么你有空的 if 块?为什么不在你的 if 条件中使用 !=?
  • 这个换行符究竟是在哪里“创建”的?如果 stufftocopy 一开始是空的,并且其中一个 pulldownresponse 不为空,那么您最终会在 stufftocopy 中得到一个前导“\n”
  • @user1269942 请永远不要鼓励某人使用alert() 进行调试!为此目的有浏览器控制台和标准 js 日志记录。

标签: javascript newline


【解决方案1】:

不,它不会添加新行,请参阅:

stuffToCopy = "";
controlGroup = "a\nb";
pullDownResponseE = "";

if (pullDownResponseE == "")
{
}
else {
    var pullDownValuesE = "taskOne";
    var pullDownResponseE = "value";
    stuffToCopy = stuffToCopy + "\n" + pullDownResponseE;
}
alert("stuffToCopy:"+stuffToCopy+";(no new-line here)\ncontrolGroup:"+controlGroup);

我的猜测是,您的 html 被打印得如此之远,以至于您从输入中获得的值在末尾包含一个额外的换行符。尝试将您的 html 更改为 1 行,没有换行符,然后再次测试。

代替:

<option value="a
">b
</option>

尝试:

<option value="a">b</option>

【讨论】:

  • 这绝对是一个不错的猜测,但我可以向您保证 html 很好,所有这些都可以通过下拉列表正确完成,就像您在那里的示例一样。我会在一两分钟后在我的原始帖子中添加一个 html 示例。
  • 正在处理这个问题,我刚刚将 2 个示例上传到 imgur 并将它们放在原始帖子中。感谢您的帮助。
【解决方案2】:

好吧,所以我修复了它,应该使用全能的 document.getElementById 而不是尝试对我的 if 语句使用 pullDownReponse..

我只是像这样更改了 if 语句:

 if (pullDownResponseg == "")
 {
 }

到这里:

if (document.getElementById("taskThree").value == "")
 {
 }

感谢真诚的帮助。 (以及其他人荒谬的不回答)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-31
    • 2017-01-31
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    相关资源
    最近更新 更多