【问题标题】:Jquery add input array fields not passed to phpJquery添加未传递给php的输入数组字段
【发布时间】:2013-09-05 12:45:29
【问题描述】:

我有一个简单的表单,jquery 在我的表单中添加了无限的输入字段。问题是当 jquery 添加一个字段时,它实际上并没有在提交时发布任何值。任何想法如何调试这个?这是我的代码:

<script  src="../orders/src/jquery.min.js"></script>
<script type="text/javascript">
    $(function() {
        var addDiv = $('#addinput');
        var i = $('#addinput p').size() + 1;

        $('#addNew').live('click', function() {
            $('<p><input type="text" id="p_new" size="40" name="item[]" value="" placeholder="Input here" /><a href="#" id="remNew">Премахни</a> </p>').appendTo(addDiv);
            i++;
            return false;
        });

        $('#remNew').live('click', function() {
            if( i > 2 ) {
                $(this).parents('p').remove();
                i--;
            }
            return false;
        });
    });
</script>
<form action="add-exe.php" method="post">
      <div id="addinput">
        <p>
           <a href="#" id="addNew">Add line</a>
        </p>
        <input type="submit" value="Запази">
    </div>
</form>

这是一个简单的 php 端,它试图读取添加到数组中的内容。到目前为止,通过 Jquery 添加的字段没有通过

$itemlist = count($_POST['item']) ? $_POST['item'] : array();
print_r(array_values($itemlist));

如果输入字段不是动态添加的 - 表单发布数组就好了

【问题讨论】:

  • live 已弃用,请改用on
  • @FezVrasta 这个名字有 [] 这意味着一个数组完全可以被 PHP 接受
  • 我能够获取附加到 div 的项目的值。
  • @Noob 你可以在 add-exe.php 上显示代码并向我们展示你是如何尝试获取这些值的
  • 您需要给每个输入一个不同的 ID(或者不要给他们任何 ID,因为它可能不需要)。不允许使用重复的 ID,这可能会导致问题。

标签: php javascript jquery forms input


【解决方案1】:

您应该使用 on 而不是 live。此外,添加侦听器以删除字段的代码也应在每次添加后调用:

var addDiv = $('#addinput');
var i = $('#addinput p').size() + 1;

$('#addNew').on('click', function() {
    $('<p><input type="text" id="p_new" size="40" name="item[]" value="" placeholder="Input here" /><a href="#" class="remNew">Премахни</a> </p>').appendTo(addDiv);
    i++;
    assignRemoveEvents();
});

var assignRemoveEvents = function() {
    $('.remNew').off('click').on('click', function() {
        if( i > 2 ) {
            $(this).parents('p').remove();
            i--;
        }
    });
}

完成此操作后,您应该将数据导入 PHP。如果您发布您的 php 代码,我们可能会找出问题所在。

【讨论】:

  • 感谢您的快速反馈。我不知道为什么我确实开始使用 insted of live 但对我没有用,只是没有添加任何输入而没有错误。我的 php 端只是试图读取数组 $itemlist = count($_POST['item']) ? $_POST['item'] : array(); print_r(array_values($itemlist));对不起,第一次在这里 idk 如何使那个 php 看起来像一个代码:/
  • 每次添加后无需调用live。 live 执行委托,因此它适用于动态添加的元素。它应该替换为on,但您必须使用委托语法,而不是绑定语法。无论哪种情况,它都与将哪些字段发送到 PHP 无关。
  • @Saranya Sadhasivam 你是说上面的代码对你来说工作得很好?
猜你喜欢
  • 1970-01-01
  • 2013-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-16
  • 1970-01-01
  • 2015-06-29
相关资源
最近更新 更多