【问题标题】:adding a field without resetting all fields添加字段而不重置所有字段
【发布时间】:2014-02-22 23:30:05
【问题描述】:

您好,我需要使用加号和减号按钮添加和删除字段。每当我添加一个字段时,它都可以正常工作。当我在一个字段中输入内容然后添加另一个字段时,前一个字段会重置。此外,每当我单击减号按钮时,它都会删除所有字段。我希望它一次拿走一个而不重置其他字段,而且每当我单击减号按钮时,我都会不断收到 Not a Number (NaN) 错误。任何帮助是极大的赞赏。我将在下面显示我的代码。

<input name="+" type="button" id="+" onclick="addInput()" value="+" label="+" />
<input name="-" type="button" id="-" onclick="subtractInput()" value="-" label="-" />

<span id="response"></span>
<script>
    var countBox = 1;
    var boxName = 0;

    function addInput() {
        var boxName = "#";
        document.getElementById('response').innerHTML += '<br/><input type="text" id="' + boxName + '" value="' + boxName + '" "  /><br/>';
        countBox += 1;
    }

    function subtractInput() {
        var boxName = "#";
        document.getElementById('response').innerHTML -= '<br/><input type="text" id="' + boxName + '" value="' + boxName + '" "  /><br/>';
        countBox -= 1;
    }
</script>

【问题讨论】:

    标签: javascript input field add subtraction


    【解决方案1】:

    试试这个!

    我将您的代码包装在一个 div 中 [并删除了“响应”范围]

    <div id="container">
        <input name="+" type="button" id="+" onclick="addInput()" value="+" label="+" />
        <input name="-" type="button" id="-" onclick="subtractInput()" value="-" label="-" />
    </div>
    

    然后更改您的 javascript,如下所示:

    var countBox = 1;
    
    function addInput() {
        var breakNode = document.createElement("br");
        breakNode.className = countBox.toString();
    
        var input = document.createElement("input");
        input.type = "text";
        input.className = countBox.toString();
        input.value = "#" + countBox.toString();
    
        var container = document.getElementById('container');
        container.appendChild(breakNode);
        container.appendChild(input);
    
        countBox += 1;
    }
    
    function subtractInput() {
        countBox -= 1;
    
        // There will be 2 elements: 1 input, 1 br.
        var elements = document.getElementsByClassName(countBox.toString());
        var input = elements[1];
        var br = elements[0];
    
        input.parentNode.removeChild(input);
        br.parentNode.removeChild(br);
    }
    

    Try it with this Fiddle

    如果您有任何问题,请告诉我!

    编辑:我制作了一个更简洁的版本,你现在可以顺便看看 :)

    参考资料:

    1. Create Input Element Dynamically
    2. Remove Child Node in HTML

    编辑 2:这是您的新问题的解决方案:

    首先,我在第一个输入的名称ECPartNumber 上添加了一个1,并将其id 更改为1:

    <input name="ECPartNumber1" type="text" id="1" value="#" size="10" maxlength="10">
    

    我将 id 更改为 1 的原因是因为以下输入的 ids 从 1 开始计数,所以我认为这样会更好看。

    接下来,我在 javascript 文件的顶部声明了var countBox = 1;,以便FrontPage_Form1_Validator 函数能够使用它。

    addInput 函数中,我添加了一行来为每个输入创建新名称:

    input.name = "ECPartNumber" + countBox.toString();
    

    subtractInput 函数中,我添加了一个 if 语句以确保您无法删除原始 ECPartNumber 输入:

    if (countBox >= 2) {
        ...
    }
    

    最后,在 FrontPage_Form1_Validator 函数中,我创建了一个 for 循环,运行每个 ECPartNumber 的名称以检查它们是否为“#”或更多:

    for (var i = 1; i <= countBox; i++) {
        var partNum = "ECPartNumber" + i.toString();
        if (theForm[partNum].value == "#") {
            alert("Please enter a value for the \"EC Part Number\" field. (slot "+i+")");
            theForm[partNum].focus();
            return (false);
        }
    }
    

    Updated Fiddle

    【讨论】:

    • 非常感谢。这正是我一直在寻找的。如果我对此有任何进一步的问题,我会直接回答这个问题。再次感谢您!
    • 好的,我能够将加法和减法实现为我需要的形式。现在我需要弄清楚如何让它显示在输出中。当我提交时,我需要在电子邮件中显示添加的字段。此外,我需要弄清楚如何让添加的字段在添加后变为必需,而在删除后不再需要。我为其他所有字段设置了脚本,您可以检查一下,看看您是否可以帮助我。太感谢了。也感谢其他任何帮助的人。 Fiddle
    • Groovy,我绝对可以提供帮助!看起来您在小提琴中使用了我的旧答案-您介意我将这些功能更改为我的最新版本吗?我认为这会简单一点。
    • 谢谢你,这是完美的,我只需要调整一些东西,它应该可以完美地工作。这很棒。如果我有任何进一步的问题,我一定会在这里发布。你太棒了。谢谢。
    • 我如何接受答案,无论如何我都想帮助你。因为我的代表低于 15 岁,所以我不能投票。
    【解决方案2】:

    我不认为你可以用普通的 JS 删除一个元素。所以,这里有一些 jQuery。

    var countBox = 1;
    var boxName = 0;
    
    function addInput() {
        var boxName = "#";
        document.getElementById('response').innerHTML += '<br/><input type="text" id="' +     countBox + '" value="' + boxName + '" "  /><br/>';
        countBox += 1;
    }
    
    function subtractInput() {
        var boxName = "#";
        $(function(){
        $('#' + countBox).remove();
        });
        countBox -= 1;
    }
    

    我自己对此进行了测试,它确实有效。问题是,它不断添加到最后一个被删除的位置,而不是回到它应该开始的位置。这是给你的 jQuery 链接:
    &lt;script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"&gt;&lt;/script&gt;

    【讨论】:

    • 哦,append 在应该在的位置添加过去时也有同样的问题。
    • 当我尝试您提供的代码时,它现在只是添加了。当我单击减号按钮时没有任何反应。它之前删除了它们,只是在按钮旁边给出了一个 NaN。添加字段时仍然存在问题,如果我在其中输入数字或任何内容,它会重置前一个字段。我想在仍然能够添加字段的同时防止这种情况发生。
    • 奇数。当我尝试你的代码时,它给了我 NaN,但我的仍然有效。也许试试$(function(){ $('#response').append('&lt;br&gt;&lt;input type="text" id="'+ countBox + ' "value=" + boxName + '"" /&gt; &lt;br/&gt;')});
    • 再次测试,仍然有效。我刚刚注意到我必须按两次“-”按钮才能减一。
    • 顺便说一句,我应该在哪里输入您刚刚提供的代码?我试着把它放进去,然后什么也没有发生。两个按钮什么都不做?对不起,如果这令人沮丧。
    【解决方案3】:

    基于similar question asked previously,看起来这不能用javascript来完成,但可以用jQuery的函数append()来完成。

    【讨论】:

      【解决方案4】:

      首先,新的浏览器不允许你复制用户对html所做的更改,这就是“重置前一个字段”的原因

      现在只使用 javascript 的方法是:

      <script>
          var countBox = 0;
          var boxName = "SomeId";
      
          var addInput = function(){
              alert(boxName+countBox);
              var br = document.createElement("br");
              var input = document.createElement("input");
              input.id=boxName+countBox;
              input.value=boxName;
              document.getElementById("response").appendChild(input);
              document.getElementById("response").appendChild(br);
              countBox++;
          }
      
          var subtractInput = function(){
              countBox--;
              alert(boxName+countBox);
              document.getElementById("response").removeChild(document.getElementById(boxName+(countBox)));
              document.getElementById("response").removeChild(document.getElementById('response').getElementsByTagName('br')[countBox]);
          }
      </script>
      

      您可以找到一个工作示例here

      【讨论】:

      • 这很棒,下面的也很棒。非常感谢!
      猜你喜欢
      • 2020-08-06
      • 1970-01-01
      • 1970-01-01
      • 2018-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多