1

对不起。Javascript(使用 jquery)noob 在这里。这是问题。

我有一个带有数字的选择字段:

<div class="controls">
  <select class="span2" id='select1' onchange="addstuff()">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
  </select>
</div>
<div id="addfields"></div>

然后,我遍历指定的数字,并在 div 标记中添加一些 html,其 id 为“select1”。

function addstuff()
{
  var num = parseInt($('#select1').val())
  if (num != 0)
  {
    for (i=0; i<num;i++)
      {
        new_field += "<p>" + num + "</p>";
      }
  $('#addfields').html(new_field);
  }
}

所以如果我选择3的选项,会添加如下html:

<p> + num + </p>
<p> + num + </p>
<p> + num + </p>

但是,如果我选择 2,将追加 2 个字段:

<p> + num + </p>
<p> + num + </p>
<p> + num + </p>
<p> + num + </p>
<p> + num + </p>

但是,我希望清除以前的 html,并且只需要两个条目。

<p> + num + </p>
<p> + num + </p>

如果有人可以帮我看看我错过了什么,将不胜感激。谢谢!

4

2 回答 2

0

您永远不会初始化new_field,无论如何您都应该这样做。如果你这样做了,你的问题也将得到解决。

function addstuff() {
    var new_field = '';

顺便说一句,由于您使用的是 jQuery,因此使用事件绑定比使用事件属性更容易。而不是onchange="addstuff()",请执行以下操作:

$("#select1").on('change', addstuff);

您也可以放弃定义addstuff并将其绑定为匿名函数。

于 2013-03-09T19:44:48.757 回答
0

Easy peasy,感谢您添加了那么多解释和代码......这应该可以满足您的要求:

function addstuff()
{
  var num = parseInt($('#select1').val());
  var new_field = "";
  if (num != 0)
  {
    for (i=0; i<num;i++)
      {
        new_field += "<p>" + num + "</p>";
      }
  $('#addfields').html(new_field);
  }
}

主要是看起来你没有重新初始化那个 new_field 变量,所以它只是在构建......因为 jquery .html() 将覆盖该 addfields 中的任何内容,这意味着如果你看到构建它是因为你的 new_field 变量实际上包含积累。

于 2013-03-09T19:53:03.450 回答