我正在使用Javascript和jQuery的组合来创建FormData对象,以通过AJAX请求发送表单数据。这是我的原始代码:

// $form is a jQuery object of the form in question
var formData = new FormData($form[0]);

我的问题是找到一种简洁的方法来从.not(':visible')对象收集的数据中排除不可见的元素(即FormData)。我知道我可以使用jQuery的serialize()方法轻松完成此操作,但是由于要上传图像文件,因此在此特定实例中需要使用FormData

我设法做到这一点的唯一方法是使用以下代码:
// $form is a jQuery object of the form in question
// Clone the original form
var $formClone = $form.clone();

// Remove invisible items from form
$form.find('input, textarea').not(':visible').remove();

// Collect form data with invisible items removed
var formData = new FormData($form[0]);

// Replace form with cloned form which retains invisible elements
$form.replaceWith($formClone);

我不能简单地从克隆中删除不可见的元素并将其传递给FormData,因为除非我将克隆附加到DOM以便所有数据元素都被删除,否则所有克隆都不可见。因此,我唯一的解决方案是克隆原始表单,并保留该克隆以在从原始表单中删除不可见元素后重新附加到DOM。

我担心使用这种方法不是很有效。有没有更简单的方法来实现这一目标?

最佳答案

正如@anthonyGist在评论中指出的那样,将不可见元素设置为禁用:

$(':hidden').prop('disabled', true);

关于javascript - 从FormData对象中排除不可见的表单元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26405936/

10-12 03:41