停止提交表单中的input字段

我正在写一些JavaScript(一个greasemonkey / userscript),将一些input字段插入到网站上的表单。

事情是,我不希望那些input字段以任何方式影响表单,我不希望他们在提交表单时提交,我只希望我的JavaScript有权访问它们的值。

有什么办法可以将一些input字段添加到表单的中间,而不是在提交表单时提交?

很显然,理想的情况是input字段不在表单元素中,但是我希望我的结果页面的布局能让我插入的input字段出现在原始表单的元素之间。

您可以插入没有“名称”属性的input字段:

<input type="text" id="in-between" /> 

或者你可以简单地删除他们的表单提交(在jQuery中):

 $("form").submit(function() { $(this).children('#in-between').remove(); }); 

最简单的做法是插入带有disabled属性的元素。

 <input type="hidden" name="not_gonna_submit" disabled="disabled" value="invisible" /> 

这样你仍然可以作为窗体的子项访问它们。

被禁用的字段有缺点,即用户根本无法与它们进行交互,所以如果您有disabled文本字段,用户将无法select文本。 如果您有disabledcheckbox,则用户无法更改其状态。

你也可以在表单提交时写一些JavaScript来删除你不想提交的字段。

您可以为onsubmit编写一个事件处理程序,从所有您希望不包含在表单提交中的input字段中删除name属性。

以下是一个未经testing的例子:

 var noSubmitElements = [ 'someFormElementID1', 'someFormElementID2' ]; //... function submitForm() { for( var i = 0, j = noSubmitElements.length; i < j; i++ ) { document.getElementById(noSubmitElements[i]).removeAttribute('name'); } } form.onsubmit = submitForm; 

简单的尝试从input元素中删除名称属性。
所以它看起来像

 <input type="checkbox" checked="" id="class_box_2" value="2"> 

我只是想添加一个额外的选项:在您的input添加表单标签,并指定您的网页上不存在的表单的名称:

 <input form="fakeForm" type="text" readonly value="random value" /> 

在input中添加disabled =“disabled” ,而当jquery使用.removeAttr('disabled')提交时,删除禁用的属性

HTML:

<input type="hidden" name="test" value="test" disabled='disabled'/>

jQuery的:

$("input[name='test']").removeAttr('disabled');

我知道这个post是古老的,但我会回复。 我find的最简单/最好的方法只是简单地将名称设置为空白。

把这个提交之前:

 document.getElementById("TheInputsIdHere").name = ""; 

总之你的提交函数可能看起来像这样:

 document.getElementById("TheInputsIdHere").name = ""; document.getElementById("TheFormsIdHere").submit(); 

这将仍然提交与您的所有其他领域的forms,但不会提交一个没有名字。

在函数中通过onSubmit()处理表单的提交,并执行下面的操作来删除表单元素:使用DOM的getElementById() ,然后使用[object].parentNode.removeChild([object])

假设你的字段有一个id属性“my_removable_field”代码:

 var remEl = document.getElementById("my_removable_field"); if ( remEl.parentNode && remEl.parentNode.removeChild ) { remEl.parentNode.removeChild(remEl); } 

这将让你正是你在找什么。

你甚至需要把它们作为input元素吗? 您可以使用Javascript来dynamic创builddiv或段落或列表项目或任何包含您想要提供的信息。

但是,如果交互式元素很重要,并且将这些元素放置在<form>块之外是个痛处,那么应该可以在提交页面时从表单中移除这些元素。

 $('#serialize').click(function () { $('#out').text( $('form').serialize() ); }); $('#exclude').change(function () { if ($(this).is(':checked')) { $('[name=age]').attr('form', 'fake-form-id'); } else { $('[name=age]').removeAttr('form'); } $('#serialize').click(); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <form action="/"> <input type="text" value="John" name="name"> <input type="number" value="100" name="age"> </form> <input type="button" value="serialize" id="serialize"> <label for="exclude"> <input type="checkbox" value="exclude age" id="exclude"> exlude age </label> <pre id="out"></pre> 

您需要在表单中添加提交内容:

 <form action="YOUR_URL" method="post" accept-charset="utf-8" onsubmit="return validateRegisterForm();"> 

而剧本将是这样的:

  function validateRegisterForm(){ if(SOMETHING IS WRONG) { alert("validation failed"); event.preventDefault(); return false; }else{ alert("validations passed"); return true; } } 

这对我来说每次:)