如何在提交前向表单添加其他字段?

Posted

技术标签:

【中文标题】如何在提交前向表单添加其他字段?【英文标题】:How to add additional fields to form before submit? 【发布时间】:2013-07-22 10:56:33 【问题描述】:

有没有办法使用 javascript 和 JQuery 添加一些额外的字段以使用 POST 从 HTTP 表单发送?

我的意思是:

<form action="somewhere" method="POST" id="form">
  <input type="submit" name="submit" value="Send" />
</form>

<script type="text/javascript">
  $("#form").submit( function(eventObj) 
    // I want to add a field "field" with value "value" here
    // to the POST data

    return true;
  );
</script>

【问题讨论】:

jQuery - add additional parameters on submit (NOT ajax)的可能重复 【参考方案1】:

是的。你可以尝试一些隐藏的参数。

  $("#form").submit( function(eventObj) 
      $("<input />").attr("type", "hidden")
          .attr("name", "something")
          .attr("value", "something")
          .appendTo("#form");
      return true;
  );

【讨论】:

.appendTo(this) 可能会更好。 @jcuenod original appendTo('#form') 更好,因为这种方法允许提交另一个表单,其中包含来自该表单的值。 您必须添加一些额外的逻辑以避免每次提交时累积这些输入。 您可能需要在添加之前删除输入元素,以防它已经存在$(this).find("input[name="+"something"+"]").remove();【参考方案2】:

试试这个:

$('#form').submit(function(eventObj) 
    $(this).append('<input type="hidden" name="field_name" value="value" /> ');
    return true;
);

【讨论】:

我需要动态添加一个文件字段。我尝试使用 type=file,并将值也作为文件(我使用的是 WebKitDirectory,所以我实际上得到了文件对象),但它似乎从未传递过它。输入文本总是被传递。请帮帮我! 我的首选答案是使用this 而不是多余的#form【参考方案3】:
$('#form').append('<input type="text" value="'+yourValue+'" />');

【讨论】:

【参考方案4】:

您可以添加一个 hidden input 与您需要发送的任何值:

$('#form').submit(function(eventObj) 
    $(this).append('<input type="hidden" name="someName" value="someValue">');
    return true;
);

【讨论】:

【参考方案5】:

这行得通:

var form = $(this).closest('form');

form = form.serializeArray();

form = form.concat([
    name: "customer_id", value: window.username,
    name: "post_action", value: "Update Information"
]);

$.post('/change-user-details', form, function(d) 
    if (d.error) 
        alert("There was a problem updating your user details")
     
);

【讨论】:

是的,但是没有重定向到结果页面。 这应该可以:$('body').append(form); $(form).submit(); 这对我最有帮助,因为我有大量生成的字段,我不想为每个字段创建隐藏字段。【参考方案6】:

可能对某些人有用:

(允许您使用对象将数据添加到表单的功能,如果有的话,可以覆盖现有输入)[纯 js]

(form 是 dom el,而不是 jquery 对象 [jqryobj.get(0) if you need])

function addDataToForm(form, data) 
    if(typeof form === 'string') 
        if(form[0] === '#') form = form.slice(1);
        form = document.getElementById(form);
    

    var keys = Object.keys(data);
    var name;
    var value;
    var input;

    for (var i = 0; i < keys.length; i++) 
        name = keys[i];
        // removing the inputs with the name if already exists [overide]
        // console.log(form);
        Array.prototype.forEach.call(form.elements, function (inpt) 
             if(inpt.name === name) 
                 inpt.parentNode.removeChild(inpt);
             
        );

        value = data[name];
        input = document.createElement('input');
        input.setAttribute('name', name);
        input.setAttribute('value', value);
        input.setAttribute('type', 'hidden');

        form.appendChild(input);
    

    return form;

使用:

addDataToForm(form, 
    'uri': window.location.href,
     'kpi_val': 150,
     //...
);

你也可以这样使用

var form = addDataToForm('myFormId', 
    'uri': window.location.href,
     'kpi_val': 150,
     //...
);

如果你也喜欢,也可以添加 # ("#myformid")。

【讨论】:

【参考方案7】:

根据 Khawer 的回答,您可以避免使用 jQuery - 为了保持一致性,例如。&lt;input type="hidden" name="field_name" value="value" /&gt;

【讨论】:

以上是关于如何在提交前向表单添加其他字段?的主要内容,如果未能解决你的问题,请参考以下文章

如何在颤动中显示带有提交按钮和隐藏输入字段的html表单

如何在 laravel 中输入所有数组并在字段下方显示验证错误

单击angularjs中的提交表单时如何删除“请填写此字段”弹出但其他验证应该有效

如何在yii表单按钮提交中添加一个类

如何使用 Multer 提交带有可选文件提交的表单?

专注于下一个输入不起作用以及当用户在最后一个输入字段时如何提交表单