在 jQuery 中克隆或向表单添加输入不会提交到 Firefox 中的 PHP

Posted

技术标签:

【中文标题】在 jQuery 中克隆或向表单添加输入不会提交到 Firefox 中的 PHP【英文标题】:Cloning or adding an input to a form in jQuery does not submit to PHP in Firefox 【发布时间】:2010-10-01 11:51:58 【问题描述】:
$('#images_upload_add').click(function()
   $('.images_upload:last').after($('.images_upload:last').clone().find('input[type=file]').val('').end());        
);

使用此代码附加文件输入不会在 firefox 中上传文件。

还有

$('#image_server_add input[type=button]').click(function()
    var select = $(this).siblings('select').find(':selected');
    if(select.val())
        $('#image_server_add').before('<tr class="images_selection"><td><input type="button" value="Delete"></td><td class="main">'+select.html()+'<input type="hidden" value="'+select.html()+'" name="images_server[]"/></td></tr>');
    
)

也不会将值上传到 $_POST

我找不到任何说明为什么这在文档中不起作用,这在 IE 中有效,但在 Firefox/WebKit 中无效

为什么这些示例不能正确上传表单值?

【问题讨论】:

【参考方案1】:

页面上的标记被破坏了。

表单是基于表格的布局,不是我选择的,表单声明位于 tr 内。

我将表单声明移动到表单输入的父 td,现在它可以工作了。

考虑到渲染引擎会正确提交放置不当的输入,但尝试使用 jQuery/javascript 添加这些输入,这是一个有趣的结果?在 Firefox/WebKit 中不能进入同一个地方。

我认为这与 javascript 所做的 dom 操作有关,以及它对块级元素的要求可能更加严格。

如果对我的发现有更多的注释/猜想,我们将不胜感激。

【讨论】:

是的!感谢您不再存在的用户!我基本上在我的 HTML 中找到了这个:&lt;span&gt;&lt;form&gt;&lt;/span&gt;...&lt;/form&gt;。 FF 在看到 &lt;/span&gt; 时会关闭表单,但现有的表单元素仍将是该表单的一部分,但新的(通过 JS 添加的)不会。【参考方案2】:

如果您创建一个新输入而不是克隆一个现有输入,您是否遇到同样的问题?

您是要更改克隆输入的名称以避免名称冲突,还是使用数组样式名称(例如file[])?

将所选选项的标记添加到隐藏输入的目的是什么?

为了好玩,你试过用.clone(true)吗?

【讨论】:

【参考方案3】:

哇!有时 jQuery 实际上可能过于密集而无法阅读。如果我们能看到您的标记,也会有所帮助。 在这里暗中刺伤,因为我猜你想做什么。

您不能以编程方式在文件字段中输入文件名并将其上传到服务器。那会很危险。

也许我找错树了?

【讨论】:

不是错误的树 :) 不过,这不是我想要做的,我只是添加更多输入字段,以便用户可以选择多个选项或上传多个图像 我认为浏览器不支持多个文件上传,这就是为什么有这么多基于Flash的解决方案来实现这一点。不过可能与您的一般问题无关。 可以,但是如果我直接在 html 文件中创建两个文件输入而不是克隆一个,它可以工作。【参考方案4】:

也许不是在提交表单时添加元素,而是将元素放入,但使用默认值。

然后,当单击按钮时,使用正确的值填充该元素。

我只是说,因为当您单击提交时,可能为时已晚,添加的元素与表单一起提交。

【讨论】:

【参考方案5】:

我从谷歌搜索到了这个部分,搜索了一个类似的问题。

对我来说,我可以通过退后一步来解决问题 -

以示例形式:

    <table>
<form method="post">
<tr>some content <input type="text" name="test"> </tr>
</form>
</table>

由于某种原因,这将在 Internet Explorer 中工作,但它实际上是无效的 html。 将表单标签移到表格外,如下所示:

<form method="post">
    <table>
<tr>some content <input type="text" name="test"> </tr>
</table> 
</form>

然后它就会起作用。

输入会以这种方式正常工作(甚至是动态),我在表单工作时遇到了很多麻烦,直到您插入更多输入或表单元素 - 只有原始元素会提交,这很难跟踪.

【讨论】:

以上是关于在 jQuery 中克隆或向表单添加输入不会提交到 Firefox 中的 PHP的主要内容,如果未能解决你的问题,请参考以下文章

jQuery克隆后Chrome错误地使表单输入无效

克隆 JQuery 后添加额外的输入文本

有没有办法在 jQuery 或 javascript 中克隆表单字段值?

jQuery AJAX 将提交的表单替换为表单(好),但不会再次提交

使用带有添加和删除元素条件的 jQuery 克隆表单

提交时应该如何收集克隆的 Django 表单?