在JavaScript中动态生成输入名称

时间:2012-03-31 01:00:53

标签: php javascript jquery concatenation

我正在尝试创建一个页面,用户可以根据需要向表中添加任意数量的行,然后将输入的值(表中每个单元格中有一个输入)传递回页面。

当试图使每个动态生成的输入框的名称不同时,我的问题出现了。我尝试创建一个变量来执行此操作,但我在其他地方使用的语法在创建新元素时似乎无效。

以下是相关代码:

    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 [&#39;部门&#39; 。 $ i]在$ i = 1时有效,因为dept_1被写入页面的HTML中。

alert(&#34; dept _&#34; + i)工作,将i的值连接到字符串。

名=&#34;部门_&#34; +我不工作。检查新元素,其名称为&#34; dept_ + i&#34;

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

3 个答案:

答案 0 :(得分:5)

不要让自己如此努力。 使用数组名称。

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

使用$ _POST ['dept']和$ _POST ['hours']获取PHP中的值,这将返回漂亮的干净数组。

答案 1 :(得分: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>');

答案 2 :(得分:0)

您需要在字符串中修复一些javascript语法错误,以便在适当的位置结束字符串,以便'string1' + i + 'string2'

    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;
        });
    });