【问题标题】:Input fields added dynamically through jquery not being submitted通过jquery动态添加的输入字段未提交
【发布时间】:2020-02-10 20:24:55
【问题描述】:

我已经制作了一个表格,如果用户点击一个 td,它会转换为一个包含名称和值的输入字段。

字段创建成功,但未与表单一起提交。

在我的 HTML/PHP 中:

            <tr>
            <form action='form_handlers/assign_query.php' method='POST'>
                    <td >{$row['id']}</td>
                    <td class='editable-td' data-name='name'>{$row['name']}</td>
                    <td class='editable-td' data-name='phone_no'>{$row['phone_no']}</td>
                    <td class='editable-td' data-name='email'>{$row['email']}</td>
                    <td class='editable-td' data-name='type'>{$row['type']}</td>
                    <td class='short-cell editable-td textarea'  data-name='query'>
                        <div class='scrollable'>{$row['query']}</div>
                    </td>
                    <td class='editable-td' data-name='agents'>{$row['agents']}</td>
                    <td class='editable-td'><button type='submit' class='cstm-btn' name='update_query'><i class='fa fa-pencil'></i></button></td>
            </form>
            </tr>

在我的 Js 中:

$('.editable-td').dblclick(function() {
    if($(this).hasClass('enabled')) {
        console.log('already enabled');
    } else {
        $(this).addClass('enabled');
        if($(this).hasClass('textarea')) {
            var text_content = $(this).find('.scrollable').html();
            var name = $(this).data('name');
            console.log(name);
            $(this).html("<textarea name='"+name+"'>"+ text_content +"</textarea>");
        }
        else {
            var text_content = $(this).html();
            var name = $(this).data('name');
            console.log(name);
            $(this).html("<input type='text' name='"+name+"' value='"+ text_content +"' ></input>");
        }
    }
});

在 form_hanlders/assign_query.php 中:

<?php 
print_r($_POST);
?>

由 jQuery 动态添加的输入字段不会显示在 $_POST 数组中。但是,如果我手动输入 jQuery 生成的完全相同的行并将其粘贴到 td 中,它就会被提交。有什么帮助吗?

P.S : 我已经阅读了 thisthisthis ,但它们没有帮助。

【问题讨论】:

  • 你为什么将 html 传递给 text_content 变量而不只是文本创建的 textarea 标签?
  • 我猜是可读的代码

标签: javascript php jquery html forms


【解决方案1】:

问题是因为您的 HTML 无效。您不能将form 元素作为tr 的子元素。如果您在开发工具 DOM 检查器中检查 HTML,您会看到 form 元素已被移出表格(因此它不再包含 inputtextarea 元素)或已被删除完全。

要解决这个问题,表单需要包装整个table,如下所示:

<form action="form_handlers/assign_query.php" method="POST">
  <table>
    <tbody>
      <tr>
        <td>{$row['id']}</td>
        <td class="editable-td" data-name="name">{$row['name']}</td>
        <!-- additional cells... -->
      </tr>
    </tbody>
  </table>
</form>

【讨论】:

  • 我确信这会解决问题,但我无法将表格包装在表格中,因为表格中有多行。就像一个记录表,每一行都必须有一个可以编辑的单独表格。任何解决方法?感谢您的帮助
  • 并非如此。您要么需要使用 AJAX 并且只发送更新的行,发送整个表并确定服务器上的更改值,要么不使用 table
猜你喜欢
  • 1970-01-01
  • 2012-05-26
  • 2021-05-21
  • 1970-01-01
  • 2013-10-22
  • 1970-01-01
  • 2012-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多