javascript - 为什么 FormData 发布禁用的 html 字段?

标签 javascript jquery ajax form-data disabled-input

我正在使用 jquery $.ajax(); 函数来发布表单数据, 为了获取表单的数据,我正在使用 new FormData 因为在我的表单中也有一个输入文件。

问题是我在表单中也禁用了字段,这些字段通常不会发布,但如果我使用新的 FormData 它们就会发布。

如何解决这个问题?我不需要发布禁用的输入字段!

最佳答案

如何仅使用您想要的字段构建 FormData:

// New FormData, get form and inputs
var payload = new FormData(),
    $form = $("form")
    $inputs = $("input", $form);

// For each input
for (var i = 0, l = $inputs.length; i < l; i++) {
    // Cache jQuery selector for input and get disabled attr
    var $input = $(inputs[i]),
        disabled_attr = $input.attr("disabled");

    // If the disabled attr is undefined or false
    // see http://stackoverflow.com/questions/1318076/jquery-hasattr-checking-to-see-if-there-is-an-attribute-on-an-element
    if (disabled_attr === "undefined" || disabled_attr === false) {

        // Append the key value pair to the FormData
        payload.append($input.attr("name"), $input.attr("value"));
    }
}

您现在应该能够使用 $.ajax 上的 data 提交 FormData。如果失败,您可以使用普通 JavaScript 提交它:

var xhr = new XMLHttpRequest();
xhr.open("POST", url, true);
xhr.send(payload);

关于javascript - 为什么 FormData 发布禁用的 html 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21478834/

相关文章:

javascript - 使用 Cheerio 网页抓取工具导航 html

javascript - rails link_to :remote

javascript - 通过 AJAX 向 PHP 发送多组复选框

javascript - html 每行代码换行

jquery - 将原型(prototype)转换为 jQuery

javascript - 如何将要附加图像的元素传递给 image.onload() 函数

javascript - 数组弹出爆炸

javascript - 我如何确定相对较新版本的 IE 的高度和宽度(IE8 不喜欢从 JavaScript 设置这种样式的原因是什么?)

javascript - jQuery replaceWith 后缺少 CSS 类。怎么修?

javascript - 找到所有 parent 并在 TreeView 中检查他们?