Aco*_*orn 104 html javascript forms userscripts
我正在写一些javascript(一个greasemonkey/userscript),它会将一些输入字段插入到网站上的表单中.
问题是,我不希望这些输入字段以任何方式影响表单,我不希望在提交表单时提交它们,我只希望我的javascript可以访问它们的值.
有没有什么方法可以将一些输入字段添加到表单的中间,而不是在提交表单时提交它们?
显然理想的事情是输入字段不在表单元素中,但我希望我的结果页面的布局使我插入的输入字段出现在原始表单的元素之间.
Gal*_*Gal 150
您可以插入没有"name"属性的输入字段:
<input type="text" id="in-between" />
Run Code Online (Sandbox Code Playgroud)
或者你可以在提交表单后简单地删除它们(在jquery中):
$("form").submit(function() {
$(this).children('#in-between').remove();
});
Run Code Online (Sandbox Code Playgroud)
Joh*_*hrn 52
最简单的方法是插入带有disabled属性的元素.
<input type="hidden" name="not_gonna_submit" disabled="disabled" value="invisible" />
Run Code Online (Sandbox Code Playgroud)
这样您仍然可以作为表单的子项访问它们.
禁用字段的缺点是用户根本无法与它们交互 - 因此,如果您有disabled文本字段,则用户无法选择文本.如果您有一个disabled复选框,则用户无法更改其状态.
您还可以在表单提交时编写一些javascript以删除您不想提交的字段.
Les*_*iev 12
简单的尝试从input元素中删除name属性.
所以它必须看起来像
<input type="checkbox" checked="" id="class_box_2" value="2">
Run Code Online (Sandbox Code Playgroud)
小智 9
我只是想添加一个附加选项:在您的输入中添加表单标记并指定页面上不存在的表单的名称:
<input form="fakeForm" type="text" readonly value="random value" />
Run Code Online (Sandbox Code Playgroud)
您可以编写一个事件处理程序,用于从您希望不包含在表单提交中的所有输入字段onsubmit中删除该name属性.
这是一个快速未经测试的例子:
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;
Run Code Online (Sandbox Code Playgroud)
小智 6
上述所有答案已经说明了有关(不)命名表单控件或在实际提交表单之前以编程方式删除它们的所有内容。
尽管如此,在我的研究中,我发现了我在这篇文章中没有提到的另一个解决方案:
如果您将想要未处理/不发送的表单控件封装在另一个<form>没有method属性的标签内,也没有path(显然没有提交类型控件)像按钮或提交嵌套在其中的输入),然后提交父表单将不包含那些封装的表单控件。
<form method="POST" path="/path">
<input type="text" name="sent" value="..." />
<form>
<input type="text" name="notSent" value="..." />
</form>
<input type="submit" name="submit" value="Submit" />
</form>
Run Code Online (Sandbox Code Playgroud)
[name="notSent"] 控制值不会被处理,也不会发送到服务器 POST 端点,但来自 [name="sent"] 的控制值会被处理。
这个解决方案可能是轶事,但我仍然把它留给后代......
我知道这个帖子很古老,但我还是会回复。我发现的最简单/最好的方法就是简单地将名称设置为空白。
把这个放在你提交之前:
document.getElementById("TheInputsIdHere").name = "";
Run Code Online (Sandbox Code Playgroud)
总而言之,您的提交功能可能如下所示:
document.getElementById("TheInputsIdHere").name = "";
document.getElementById("TheFormsIdHere").submit();
Run Code Online (Sandbox Code Playgroud)
这仍将提交包含所有其他字段的表单,但不会提交没有名称的表单。