【发布时间】:2012-03-31 06:30:27
【问题描述】:
有没有办法返回表单中包含的所有字段名称的列表/数组?即,如果我在提交时制作了一个包含 10 个字段(“姓名”、“电子邮件”等)的表单,我可以确定元素名称是什么?
【问题讨论】:
-
您的问题可以用 php 和 javascript 解决...很高兴知道您更喜欢哪一个...
标签: php javascript jquery forms field
有没有办法返回表单中包含的所有字段名称的列表/数组?即,如果我在提交时制作了一个包含 10 个字段(“姓名”、“电子邮件”等)的表单,我可以确定元素名称是什么?
【问题讨论】:
标签: php javascript jquery forms field
原始的 JS 方法是:
const inputs = document['<your form name>'].getElementsByTagName("input");
for (const input in inputs) {
if (inputs[input] && inputs[input].name) {
console.log(inputs[input].name);
}
}
是的。它们都在超全局变量 $_GET(对于所有 GET 变量)、$_POST(如果您的表单有 method="POST")和 $_REQUEST($_REQUEST 默认情况下是 Environment、Get、Post、Cookie , 和服务器(按此顺序)you can read more here)。
如果您只想获得名称,那么您可以在上述任何一个上使用array_keys。
【讨论】:
$_REQUEST 结合了 $_GET、$_POST 和 $_COOKIE,因此表单中的值可能会被其他两个之一中的值覆盖。跨度>
input 标签。其余使用 getElementsByTagName("select"); 等。
inputs var,但后来使用lst var 引用它。我编辑并修复。我也使用了代码,因为我只能使用表单的 ID(并不总是有)找到其他答案。谢谢!
在 JavaScript 中,我们可以像这样获取每个表单元素的 name 属性:
$('form').on('submit', function () {
var names = [];
$.each($(this).find('input, textarea'), function () {
names.push(this.name);
});
});
这会收集表单中每个input 或textarea 元素的name 属性,并将它们放入一个数组names。
请注意,.on() 是 jQuery 1.7 的新内容,在这种情况下与使用 .bind() 相同:http://api.jquery.com/on
在 PHP 中,您可以遍历每个 $_GET 或 $_POST 变量:
<?php
$names = array();
if (isset($_POST) && !empty($_POST)) {
foreach ($_POST as $key => $val) {
//$key is the name you wanted, and $val is the value of that input
$names[] = $key;
}
}
?>
同样,$names 变量是一个包含所有表单元素名称的数组。
如果您想在 JS 中创建 names : values 的关联数组,您可以这样做:
$('form').on('submit', function () {
var names = {};
$.each($(this).find('input, textarea'), function () {
names[this.name] = this.value;
});
});
现在您可以像这样访问names 变量:
alert(names.email);//this will alert the value of the input who's name is `email`
【讨论】:
names 的关联数组:values 然后试试我的更新。
jQuery 序列化: http://api.jquery.com/serialize/
$('form').submit(function() {
alert($(this).serialize());
return false;
});
【讨论】:
$_POST 数组包含表单的方法为 post 时已提交的所有字段。如果方法是 get 则 $_GET 具有表单字段(以及恰好在 URL 中的任何其他 get 参数)
【讨论】:
使用 JQuery,您可以通过选择输入元素并使用 attr('name'); 来了解它
使用 PHP :
你可以用foreach遍历$_GET, $_POST
也可以通过array_keys($_POST)获取key列表;
【讨论】:
:input 选择器会在客户端找到表单元素
http://api.jquery.com/input-selector/
$('form').submit(function() {
var inputList = [];
$(this).find(':input').each(function() {
inputList.push(this.name);
})
alert(inputList.join(', '))
return false;
})
【讨论】:
是的,它们是您的 $_POST 的键,例如:
$_POST['name'] = 'whatever name was in the form';
您可以通过print_r($_POST) 查看所有密钥。
(或$_GET,取决于您的表单提交方法)
【讨论】:
这些解决方案完全解决了您的问题,但他们写的是使用 jQuery。 jQuery 现在不是一个流行的库。我们可以更轻松地用纯 JavaScript 解决。
[...document.querySelectorAll("form input, form textarea, form select")].map(el => el.name)
【讨论】: