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

$('#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(''+select.html()+''); } }) 

也不会将值上传到$ _POST

我找不到任何说法为什么这在文档中不起作用,这适用于IE但不适用于Firefox / WebKit

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

最重要的是页面上的标记被破坏了。

表单是基于表的布局,而不是我的选择,表单声明在tr中。

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

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

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

关于我的发现的任何更多的注释/猜想将不胜感激。

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

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

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

为了好玩,您尝试过使用.clone(true)吗?

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

您无法以编程方式在文件字段中输入文件名,并将其上载到服务器。 这将是危险的。

也许我正在吠叫错误的树?

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

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

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

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

对我来说,我能够通过退一步解决问题来解决这个问题 –

在一个示例forms:

  some content 

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

 
some content

它会起作用。

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