【问题标题】:Get form field names with javascript or php?使用 javascript 或 php 获取表单字段名称?
【发布时间】:2012-03-31 06:30:27
【问题描述】:

有没有办法返回表单中包含的所有字段名称的列表/数组?即,如果我在提交时制作了一个包含 10 个字段(“姓名”、“电子邮件”等)的表单,我可以确定元素名称是什么?

【问题讨论】:

  • 您的问题可以用 php 和 javascript 解决...很高兴知道您更喜欢哪一个...

标签: php javascript jquery forms field


【解决方案1】:

JavaScript

原始的 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);
    }
}

PHP

是的。它们都在超全局变量 $_GET(对于所有 GET 变量)、$_POST(如果您的表单有 method="POST")和 $_REQUEST$_REQUEST 默认情况下是 Environment、Get、Post、Cookie , 和服务器(按此顺序)you can read more here)。

如果您只想获得名称,那么您可以在上述任何一个上使用array_keys

【讨论】:

  • 需要注意的是 $_REQUEST 结合了 $_GET$_POST$_COOKIE,因此表单中的值可能会被其他两个之一中的值覆盖。跨度>
  • 在js方法中,如果字段是radio、textarea或者select type怎么办?
  • @Shiplu Radio 只是input 标签。其余使用 getElementsByTagName("select"); 等。
  • 您将列表数据设置为inputs var,但后来使用lst var 引用它。我编辑并修复。我也使用了代码,因为我只能使用表单的 ID(并不总是有)找到其他答案。谢谢!
【解决方案2】:

在 JavaScript 中,我们可以像这样获取每个表单元素的 name 属性:

$('form').on('submit', function () {
    var names = [];
    $.each($(this).find('input, textarea'), function () {
        names.push(this.name);
    });
});

这会收集表单中每个inputtextarea 元素的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`

【讨论】:

  • 效果很好。当我尝试访问数组中的 [0] 时。它会打印两次名称?
  • 好的,那么我将如何将每个变量放入一个变量中?
  • @ChrisTill 这是一个演示如何使用它:jsfiddle.net/d8UnZ。你会注意到只有第一个索引被提醒,如果你观察你的控制台,你会看到整个数组。
  • @ChrisTill 如果你想创建一个 names 的关联数组:values 然后试试我的更新
  • 啊,谢谢,效果很好。我需要将名称 [1] 等放入 php 变量中。有什么建议吗?
【解决方案3】:

jQuery 序列化: http://api.jquery.com/serialize/

$('form').submit(function() {
  alert($(this).serialize());
  return false;
});

【讨论】:

    【解决方案4】:

    $_POST 数组包含表单的方法为 post 时已提交的所有字段。如果方法是 get 则 $_GET 具有表单字段(以及恰好在 URL 中的任何其他 get 参数)

    【讨论】:

      【解决方案5】:

      使用 JQuery,您可以通过选择输入元素并使用 attr('name'); 来了解它

      使用 PHP :

      你可以用foreach遍历$_GET, $_POST 也可以通过array_keys($_POST)获取key列表;

      【讨论】:

        【解决方案6】:

        :input 选择器会在客户端找到表单元素

        http://api.jquery.com/input-selector/

        演示http://jsfiddle.net/JBsbL/

        $('form').submit(function() {
            var inputList = [];
            $(this).find(':input').each(function() {
                inputList.push(this.name);
            })
            alert(inputList.join(',  '))
            return false;
        })​
        

        【讨论】:

          【解决方案7】:

          是的,它们是您的 $_POST 的键,例如:

          $_POST['name'] = 'whatever name was in the form';
          

          您可以通过print_r($_POST) 查看所有密钥。

          (或$_GET,取决于您的表单提交方法)

          【讨论】:

            【解决方案8】:

            这些解决方案完全解决了您的问题,但他们写的是使用 jQuery。 jQuery 现在不是一个流行的库。我们可以更轻松地用纯 JavaScript 解决。

            [...document.querySelectorAll("form input, form textarea, form select")].map(el => el.name)
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-06-08
              • 1970-01-01
              • 2015-05-16
              • 1970-01-01
              • 2015-10-26
              • 2023-04-02
              相关资源
              最近更新 更多