1

所以我得到了这个:

HTML

<table id="mytable">
<tr>
   <td>

   </td>
   <td>

   </td>
</tr>
<tr>
   <td>
      3. Choose elements:
   </td>
   <td>
      <select name="antal_tidspunkter" id="antal_tidspunkter">
         <option value="1" SELECTED>1</option>
         <option value="2">2</option>
         <option value="3">3</option>
         <option value="4">4</option>
         <option value="5">5</option>
      </select>
   </td>
</tr>
    <tr class="highlightedRowStart">
   <td class="borderLeft">
      Time
   </td>
   <td class="borderRight">
      <select name="seats_timeclock[29]">
         <option value="08:00">08:00</option>
         <option value="08:30">08:30</option>
         <option value="09:00">09:00</option>
         <option value="09:30">09:30</option>
         <option value="10:00">10:00</option>
         <option value="10:30">10:30</option>
         <option value="11:00">11:00</option>
         <option value="11:30">11:30</option>
         <option value="12:00">12:00</option>
         <option value="12:30">12:30</option>
         <option value="13:00">13:00</option>
         <option value="13:30">13:30</option>
         <option value="14:00">14:00</option>
         <option value="14:30">14:30</option>
         <option value="15:00">15:00</option>
         <option value="15:30">15:30</option>
         <option value="16:00">16:00</option>
         <option value="16:30">16:30</option>
         <option value="17:00">17:00</option>
         <option value="17:30">17:30</option>
         <option value="18:00" SELECTED>18:00</option>
         <option value="18:30">18:30</option>
         <option value="19:00">19:00</option>
         <option value="19:30">19:30</option>
         <option value="20:00">20:00</option>
         <option value="20:30">20:30</option>
         <option value="21:00">21:00</option>
         <option value="21:30">21:30</option>
         <option value="22:00">22:00</option>
         <option value="22:30">22:30</option>
      </select>
   </td>
</tr>
<tr class="highlightedRowMiddle">
   <td class="borderLeft">
      2:
   </td>
   <td class="borderRight">
      <select name="seats_free_2tables[29]">
         <option value="0">0</option>
         <option value="1">1</option>
         <option value="2" SELECTED>2</option>
         <option value="3">3</option>
         <option value="4">4</option>
         <option value="5">5</option>
         <option value="6">6</option>
         <option value="7">7</option>
         <option value="8">8</option>
         <option value="9">9</option>
         <option value="10">10</option>
         <option value="11">11</option>
         <option value="12">12</option>
         <option value="13">13</option>
         <option value="14">14</option>
         <option value="15">15</option>
         <option value="16">16</option>
         <option value="17">17</option>
         <option value="18">18</option>
         <option value="19">19</option>
         <option value="20">20</option>
      </select>
   </td>
</tr>
<tr class="">
   <td class="borderLeft">
     4:
   </td>
   <td class="borderRight">
      <select name="seats_free_4tables[29]">
         <option value="0">0</option>
         <option value="1">1</option>
         <option value="2">2</option>
         <option value="3">3</option>
         <option value="4" SELECTED>4</option>
         <option value="5">5</option>
         <option value="6">6</option>
         <option value="7">7</option>
         <option value="8">8</option>
         <option value="9">9</option>
         <option value="10">10</option>
         <option value="11">11</option>
         <option value="12">12</option>
         <option value="13">13</option>
         <option value="14">14</option>
         <option value="15">15</option>
         <option value="16">16</option>
         <option value="17">17</option>
         <option value="18">18</option>
         <option value="19">19</option>
         <option value="20">20</option>
      </select>
   </td>
</tr>
<tr class="highlightedRowEnd">
   <td class="borderLeft">
      Converttable
   </td>
   <td class="borderRight">
      <select name="seats_converttables[29]">
         <option value="0">0</option>
         <option value="1">1</option>
         <option value="2" SELECTED>2</option>
         <option value="3">3</option>
         <option value="4">4</option>
         <option value="5">5</option>
         <option value="6">6</option>
         <option value="7">7</option>
         <option value="8">8</option>
         <option value="9">9</option>
         <option value="10">10</option>
         <option value="11">11</option>
         <option value="12">12</option>
         <option value="13">13</option>
         <option value="14">14</option>
         <option value="15">15</option>
         <option value="16">16</option>
         <option value="17">17</option>
         <option value="18">18</option>
         <option value="19">19</option>
         <option value="20">20</option>
      </select>
   </td>
</tr>
<tr class="spacer">
   <td></td>
</tr>
</table>

jQuery

$(document).ready(function() {

    $("#antal_tidspunkter").bind("change", function() {
        $("#mytable tr:gt(6)").remove();
        for (var i = 1; i < this.value; i++) {
            $("#mytable tr:gt(1):lt(5)").clone().appendTo("#mytable");
        }
    });
});

演示:http: //jsfiddle.net/bTWQg/

像这样工作,当您更改选择器中的元素数量时,它会添加更多元素。

我的问题是,当它复制元素时,它会保留名称:seats_timeclock[29]所以稍后当我处理表单(PHP)时,我只收到一个元素的数据。

[]无论如何,11111, 99999每次元素被复制时都会在里面添加一个随机数吗?否则我无法获取填充在新元素上的数据..

4

5 回答 5

1
$(document).ready(function() {

    // function to generate random number
    // between 1111 to 9999

    function randNum() {
        return Math.floor(Math.random() * (9999 - 1111 + 1)) + 1111;
    }

    $("#antal_tidspunkter").bind("change", function() {
        $("#mytable tr:gt(6)").remove();
        for (var i = 1; i < this.value; i++) {
            $("#mytable tr:gt(1):lt(5)")
                .clone()
                .find('select[name^=seats_timeclock]')
                attr('name', function() { // changing the name
                    return 'seats_timeclock_[' + randNum() + ']';
                })
                .end() // go back to clone element
                .appendTo("#mytable");
        }
    });
});

演示

上面的代码将在不更改 HTML 和单个链语句的情况下工作。

根据你的演示

$(document).ready(function() {
    // function to generate random number
    function randNum() {
        return Math.floor(Math.random() * (9999 - 1111 + 1)) + 1111;
    }
    $("#antal_tidspunkter").bind("change", function() {
        $("#mytable tr:gt(6)").remove();
        for (var i = 1; i < this.value; i++) {
            var randnr = randNum();
            
            $("#mytable tr:gt(1):lt(5)")
                .clone()
                .find('select[name^=seats_timeclock]')
                .attr('name', function() { // changing the name
                    return 'seats_timeclock[' + randnr + ']';
                })
                .end() // need to put end to jump to clone
                .find('select[name^=seats_free_2tables]')
                .attr('name', function() { // changing the name
                    return 'seats_free_2tables[' + randnr + ']';
                })
                .end()  // need to put end to jump to clone
                .find('select[name^=seats_free_4tables]')
                .attr('name', function() { // changing the name
                    return 'seats_free_4tables[' + randnr + ']';
                })
                .end()  // need to put end to jump to clone
                .find('select[name^=seats_converttables]')
                .attr('name', function() { // changing the name
                    return 'seats_converttables[' + randnr + ']';
                })
                .end() // go back to clone element
                .appendTo("#mytable");
        }
    });
});

演示

于 2012-06-23T16:55:14.293 回答
1

使用此代码:

$(document).ready(function(){

    $("#antal_tidspunkter").bind("change", function() {
        $("#mytable tr:gt(6)").remove();
        for (var i = 1; i < this.value; i++) {
            $("#mytable tr:gt(1):lt(5)").clone().children("select").attr("name", "seats_free_2tables[" + random() + "]").appendTo("#mytable");
        }
     });
});​

对于该random()功能,请使用以下代码:

function random()
{
    return Math.floor(Math.random()*10);
}

更新:此代码完全有效:

function random()
{
    return Math.floor(Math.random()*10);
}
$(document).ready(function(){
    $("#antal_tidspunkter").bind("change", function() {
        $("#mytable tr:gt(6)").remove();
        for (var i = 1; i < this.value; i++) {
            var a = $("#mytable tr:gt(1):lt(5)").clone();
            a.find(".random").attr("name", "seats_free_2tables[" + random() + "]");
            a.appendTo("#mytable");
        }
    });
});​

看到这个小提琴。给所有人上一堂课random,你需要改变!

于 2012-06-23T16:23:07.540 回答
0

您可以使用数组输入:

<select name="seats_timeclock[]">

这样,您可以在表单中添加任意数量的输入,它们将被浏览器正确打包和发送。

然后,在 PHP 中,您将拥有$_POST['seats_timeclock'][0]$_POST['seats_timeclock'][1]依此类推。您可以轻松地遍历该数组。

foreach($_POST['seats_timeclock'] as $key => $seats_timeclock) {
    // the other array posts, will be serialized in the same way, 
    // so you can access the other fields having the same index
    $seats_free_2tables = $_POST['seats_free_2tables'][$key];
    $seats_free_4tables = $_POST['seats_free_4tables'][$key];
    ...
}
于 2012-06-23T16:24:19.970 回答
0

您可以在克隆元素后更改name属性:

  var clone = $("#mytable tr:gt(1):lt(5)").clone();
  var min = 1111;
  var max = 9999;
  var number = Math.round(Math.random() * (max-min)) + min ; 
  clone.find('select[name^=seats_timeclock]')
       .attr('name','seats_timeclock['+number+']');
  clone.appendTo("#mytable");

这是一个演示:http: //jsfiddle.net/bTWQg/3/

于 2012-06-23T16:26:19.187 回答
0
$(document).ready(function(){
    var clonedObj;
    $("#antal_tidspunkter").bind("change", function() {
        $("#mytable tr:gt(6)").remove();
        for (var i = 1; i < this.value; i++) {
            clonedObj = $("#mytable tr:gt(1):lt(5)").clone();
            $(clonedObj).find('select[name="seats_timeclock[29]"]').attr('name', 'seats_timeclock[' + Math.floor((Math.random()*100000)+1) + ']');
            $(clonedObj).appendTo("#mytable");
        }
     });
});​

编辑:支持内部的可变数字seats_timeclock。利用 jQuery filter()函数和一个简单的正则表达式。

$(document).ready(function(){
    var clonedObj;
    $("#antal_tidspunkter").bind("change", function() {
        $("#mytable tr:gt(6)").remove();
        for (var i = 1; i < this.value; i++) {
            clonedObj = $("#mytable tr:gt(1):lt(5)").clone();
            $(clonedObj).find('select').filter(function(){
                if($(this).attr('name').match(/seats_timeclock/)){
                    return true;
                } else {
                    return false;
                }                   
            }).attr('name', 'seats_timeclock[' + Math.floor((Math.random()*100000)+1) + ']');
            $(clonedObj).appendTo("#mytable");
        }
     });
});​
于 2012-06-23T16:27:11.463 回答