2012-03-31 52 views
0

我正在尝试创建一个页面,用户可以根据需要向表中添加尽可能多的行,然后输入值(表格的每个单元格中都有一个输入)是传回到页面。在JavaScript中动态生成输入名称

我试图使每个动态生成的输入框的名称不同,我的问题来了。我试图创建一个变量来完成它,但是我使用的语法在其他地方可行,在创建新元素时似乎不起作用。

这里是有问题的代码:

if ($_POST['dept_1'] != null){ //If there was an input 
    $i = intval($_POST['num_of_rows']); 
    while ($i != 0){ 
     $dept = $_POST['dept_' . $i]; 
     $hours = $_POST['hours_' . $i]; 
     echo $dept . " " . $hours . "\n"; 
     $i--; 
    } 
} 

.....

var i = 2; 
     $("document").ready(function(){ 
      $("#newrow").click(function(e){ 
       $("#maintable").append('<tr> \ 
             <td><input type="text" name="dept_" + i size="5" maxlength="5" /></td> \ 
             <td><input type="text" name="hours_" + i size="5" maxlength="1" /></td> \ 
            </tr>'); 
            alert("dept_" + i); 
       e.preventDefault(); 
       $("#hiddenvalue").attr("value", "" + i + ""); 
       i = i + 1; 
      }); 
     }); 

$ POST [ '部门'。 $ i]在$ i = 1时工作,因为dept_1被写入页面的HTML中。

alert(“dept_”+ i)起作用,将i的值连接到字符串。

name =“dept_”+我不工作。检查新元素,其名称是“dept_ + i”

为什么会发生这种情况,我该如何解决?

回答

3

适当的解决方案是通过命名元素dept[]来使用数组;这会给你一个在PHP端的数组$_POST['dept']

除此之外,语法突出显示已经向您显示问题:您的+i位于字符串内部;用这个来代替:

$("#maintable").append('<tr> \ 
    <td><input type="text" name="dept_' + i + '" size="5" maxlength="5" /></td> \ 
    <td><input type="text" name="hours_' + i + '" size="5" maxlength="1" /></td> \ 
    </tr>'); 
5

不要让自己这么难。 使用数组名称。

<td><input type="text" name="dept[]" size="5" maxlength="5" /></td> 
<td><input type="text" name="hours[]" size="5" maxlength="1" /></td> 

使用$ _ POST [“部门”]和$ _ POST [“小时”]将返回干净的阵列获取在PHP中的值。

+0

谢谢你教我的东西新。尽管如此,我真的很想学习我的问题的答案,因为我曾尝试过其他时间做类似的事情,并让他们不工作。 – 2012-03-31 01:11:50

+0

@AndrewLatham在ThiefMaster的回答中,你已经掌握了一切。 – iambriansreed 2012-03-31 01:13:12

0

你需要让你最终在适当的地方绳子,让你有'string1' + i + 'string2'来修复您的字符串一些像这样的JavaScript语法错误:

var i = 2; 
    $("document").ready(function(){ 
     $("#newrow").click(function(e){ 
      $("#maintable").append('<tr> \ 
            <td><input type="text" name="dept_' + i + '" size="5" maxlength="5" /></td> \ 
            <td><input type="text" name="hours_' + i + '" size="5" maxlength="1" /></td> \ 
           </tr>'); 
           alert("dept_" + i); 
      e.preventDefault(); 
      $("#hiddenvalue").attr("value", "" + i + ""); 
      i = i + 1; 
     }); 
    }); 
+0

这是行不通的,结果是'... name =“dept_”i size =“5”...' – 2012-03-31 01:11:18

+0

@AndrewLatham - 我刚刚对我的答案做了一个更正,但即使我之前没有做过,给你的想法是。我认为你没有从我的答案中得到正确的代码。这会给'name =“dept_2”size =“5”'... – jfriend00 2012-03-31 04:40:14