【问题标题】:Problem with nested for loops in jQueryjQuery中嵌套for循环的问题
【发布时间】:2009-11-17 10:49:28
【问题描述】:

我是 jQuery 新手,所以要温柔!我有一个循环,可以在表单中输出额外的字段(基于值)。到目前为止一切都很好。但是,在我的额外字段中是出生日期集,我通常使用循环创建天/年选项。我的问题是,如何在我的外循环中创建这个内循环?到目前为止的基本大纲如下:

    function addRow() {
    for(var i=1;i<numPax;i++)
    {
        $('#additionalPax').append("My additional fields HTML in here.");
    }
}

现在我想做的是在我的附加字符串中添加一个循环来创建我的日期选择。这是不对的,而是这样的:

    function addRow() {
        for(var i=1;i<numPax;i++)
        {
            $('#additionalPax').append("<select name='dobDay'><option selected='selected' value='1'>1</option>"+for(var d=2;d<32;d++){+"<option value="+(d)+">"+(d)+"</option>"+}+"</select>");
        }
}

非常感谢任何帮助。

【问题讨论】:

  • 当你修改同一个元素 ($('#additionalPax')) 时,为什么会有外部的 for 循环,而每次迭代都没有区别?

标签: jquery forms append


【解决方案1】:

可能是你正在寻找的东西

function addRow() {
 for(var i=1;i<numPax;i++)
 {
   var data = "";
   for(var d=2;d<32;d++)
   {
     data += "<option value="+d+">"+d+"</option>";
   }

   $('#additionalPax').append("<select name='dobDay'><option selected='selected' value='1'>1</option>"+data+"</select>");
 }
}

【讨论】:

  • 谢谢大家,但选择了 Andres 解决方案。似乎工作正常。再次感谢。
【解决方案2】:

你不能那样做。在for 循环之外构建select 并将其放入一个变量中,然后您可以在for 循环中使用它:

function addRow() {
    var $elem = $('#additionalPax'),
        buffer;
    buffer = "<select name='dobDay'><option selected='selected' value='1'>1</option>";
    for (var d=2; d<32; d++) {
        buffer += "<option value="+(d)+">"+(d)+"</option>";
    }
    buffer += "</select>";
    for (var i=1; i<numPax; i++) {
        $elem.append(buffer);
    }
}

【讨论】:

    【解决方案3】:

    您必须先将整个字符串复制到一个临时变量中,然后将其发送到 append 函数。

    var strOption = "";
    
    for(var d = 2; d < 32; d++) {
        strOption += "<option value=" +  d + ">" +  d  + "</option>";
    }
    

    编辑:对于创建动态元素,请改用 document.createElement,因为它比 jQuery 替代品更快,虽然 jQuery v1.3 对此进行了优化,但 document.createElement 仍然更快。

    【讨论】:

      【解决方案4】:

      只需像这样构建一个字符串:

      function addRow()
      {
          for(var i=1;i<numPax;i++)
          {
              var str = "<select name='dobDay'><option selected='selected' value='1'>1</option>";
      
              for(var d = 2; d < 32; d++)
              {
                  str += '<option value="' + d + '">' + d + '</option>';
              }
      
              str += '</select>';
      
              $('#additionalPax').append(str);
          }
      }
      

      【讨论】:

        【解决方案5】:

        您可以使用以下代码:

        <select id="additionalPax"></select>
        <script type="text/javascript">
            function CreateDays()
            {
                var options = '';
                for (var i = 1; i <= 31; i++)
                {
                         options += (i == 1) ? 
                         "<option selected='selected' value='" + i + "'>" + i + "</option>" : 
                         "<option value='" + i + "'>" + i + "</option>";
                }
        
                $('#additionalPax').html(options);
            }
            CreateDays();
        </script>
        

        【讨论】:

        • 一个月什么时候有32天?
        • 好点,但请记住,这只是他可以使用的循环的示例(我从他的代码中复制了 32)。此外,到目前为止,此处发布的所有方法都是错误的,因为它们不包括不同月份的不同天数..
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-02
        相关资源
        最近更新 更多