JavaScript - 获取HTML表单值

use*_*419 85 html javascript

如何获取HTML表单的值以传递给JavaScript?

它是否正确?我的脚本从文本框中获取两个参数,一个来自下拉框.

<body>
<form name="valform" action="" method="POST">

Credit Card Validation: <input type="text" id="cctextboxid" name="cctextbox"><br/>
Card Type: <select name="cardtype" id="cardtypeid">
  <option value="visa">Visa</option>
  <option value="mastercard">MasterCard</option>
  <option value="discover">Discover</option>
  <option value="amex">Amex</option>
  <option value="diners">Diners Club</option>
</select><br/>
<input type="button" name="submit" value="Verify Credit Card" onclick="isValidCreditCard(document.getElementById('cctextboxid').value,document.getElementById('cardtypeid').value)" />
</body>
Run Code Online (Sandbox Code Playgroud)

use*_*632 90

HTML:

<input type="text" name="name" id="uniqueID" value="value" />
Run Code Online (Sandbox Code Playgroud)

JS:

var nameValue = document.getElementById("uniqueID").value;
Run Code Online (Sandbox Code Playgroud)

  • @ shorty876:你自己测试过吗?o_0这将是一个很好的方法来确定你是否做得对. (7认同)

Kev*_*gia 44

如果要检索表单值(例如可以使用HTTP POST发送的表单值),可以使用

JavaScript的

new FormData(document.querySelector('form'))
Run Code Online (Sandbox Code Playgroud)

form-serialize(https://code.google.com/archive/p/form-serialize/)

serialize(document.forms[0]);
Run Code Online (Sandbox Code Playgroud)

jQuery的

$("form").serializeArray()
Run Code Online (Sandbox Code Playgroud)

  • 你的第一个例子`FormData`本身没有做任何事情......你仍然需要从表单中获取值. (8认同)
  • 这就是我来这里的答案。这篇文章的问题是“获取 HTML 表单值”——值是复数。当前的最佳答案仅获取单个输入值,我想知道如何获取整个表单然后解析出值。这应该是最重要的答案。 (8认同)
  • 我相信这是不正确的。如果在初始化 FormData 时指定了一个表单元素,那么它将正确检索值。http://codepen.io/kevinfarrugia/pen/Wommgd (2认同)
  • 虽然 FormData 对象本身不是值。您仍然需要调用并迭代“FormData.entries()”以检索值。此外,“FormData.entries()”在 Safari、Explorer 或 Edge 中不可用。https://developer.mozilla.org/en-US/docs/Web/API/FormData (2认同)
  • 在浏览器兼容性方面是正确的,但是有 [polyfills](https://www.npmjs.com/package/formdata-polyfill)。关于迭代“formData.entries()”,这取决于您要寻找的内容。如果您正在查找单个字段的值,您可以使用“formData.get(name)”。参考:[get()](https://developer.mozilla.org/en-US/docs/Web/API/FormData/get)。 (2认同)
  • 是的,我无法让“FormData”在 Chrome 上输出任何内容。 (2认同)

Cod*_*ula 25

document.forms将在页面上包含一系列表单.您可以遍历这些表单以查找所需的特定表单.

var form = false;
var length = document.forms.length;
for(var i = 0; i < length; i++) {
    if(form.id == "wanted_id") {
        form = document.forms[i];
    }
}
Run Code Online (Sandbox Code Playgroud)

每个表单都有一个元素数组,然后您可以循环查找所需的数据.您还应该能够通过名称访问它们

var wanted_value = form.someFieldName.value;
jsFunction(wanted_value);
Run Code Online (Sandbox Code Playgroud)

  • @ArturKlesun我猜这是因为十年前我开始输入答案时,OP还没有更新,所以我编写了for循环来处理大多数情况。我想当时我也在确保浏览器与 IE7 的兼容性,因为我们没有今天所拥有的更好的环境。 (3认同)

小智 23

以下是W3Schools的一个例子:

function myFunction() {
    var elements = document.getElementById("myForm").elements;
    var obj ={};
    for(var i = 0 ; i < elements.length ; i++){
        var item = elements.item(i);
        obj[item.name] = item.value;
    }

    document.getElementById("demo").innerHTML = JSON.stringify(obj);
}
Run Code Online (Sandbox Code Playgroud)

该演示可以在这里找到.

  • 只是一个警告,如果有人想要获得其他类型输入的选定值,如单选按钮或复选框,这将不会做你想要的. (9认同)
  • @bluejayke该代码将循环遍历所有单选按钮输入,并将最后一个单选按钮的“值”保存到“obj”,无论选择哪一个。此处演示了该问题(选择“选项 1”)https://www.w3schools.com/code/tryit.asp?filename=GEZXJXBBI7AW (2认同)

Ded*_*Dev 15

我发现这是最优雅的解决方案。

function handleSubmit(e) {
  e.preventDefault();
  const formData = new FormData(e.target);
  const formProps = Object.fromEntries(formData);
}
Run Code Online (Sandbox Code Playgroud)

  • @Radek示例: `const loginForm = document.getElementById("login-form");` `loginForm.addEventListener("submit", handleSubmit);` (4认同)
  • 就像魅力一样,你成功了!@DedaDev (3认同)
  • 这不适用于具有数组字段的表单。想象一下多个“&lt;input name="categories[]"&gt;”,这只会捕获最后一个值。 (3认同)
  • @DedaDev 取决于您所说的“事物”的含义,具有相同名称的输入是有效的,例如对于复选框,我希望将它们收集为数组,而不是仅返回具有该名称的最后一个字段。我认为也许我发布的使用 `[]` 的示例更多的是旧的 PHP 约定,但并没有真正改变要点。/sf/ask/31644651/ (3认同)

Art*_*sun 13

我的 5 美分在这里,使用form.elements它允许您通过it'sname查询每个字段,而不仅仅是通过迭代:

const form = document.querySelector('form[name="valform"]');
const ccValidation = form.elements['cctextbox'].value;
const ccType = form.elements['cardtype'].value;
Run Code Online (Sandbox Code Playgroud)


tol*_*uso 12

这是/sf/answers/2888405341/的开发示例

考虑

<form method="POST" enctype="multipart/form-data" onsubmit="return check(event)">
    <input name="formula">
</form>
Run Code Online (Sandbox Code Playgroud)

让我们假设我们要检索 name 的输入formula。这可以通过eventonsubmit字段中传递 来完成。然后我们可以FormData通过引用SubmitEvent对象来检索这种精确形式的值。

const check = (e) => {
    const form = new FormData(e.target);
    const formula = form.get("formula");
    console.log(formula);
    return false
};
Run Code Online (Sandbox Code Playgroud)

然后上面的 JavaScript 代码将输入的值打印到控制台。

如果要迭代值,即获取所有值,请参阅https://developer.mozilla.org/en-US/docs/Web/API/FormData#Methods


sma*_*ert 9

ES6 的单衬

getFormData = (selector) => Object.fromEntries(new FormData(document.querySelector(selector)))

console.log('Output of getFormData:')
console.log(getFormData('#myTargetForm'))
Run Code Online (Sandbox Code Playgroud)
<!DOCTYPE html>
<html>
<body>

<h2>Get Form Data as Javascript Object</h2>

<form id="myTargetForm">
  <label for="fname">First name:</label><br>
  <input type="text" id="fname" name="fname" value="John"><br>
  <label for="lname">Last name:</label><br>
  <input type="text" id="lname" name="lname" value="Doe"><br><br>
  <input type="submit" value="Submit">
</form> 
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

在 Javascript 中定义此函数:

getFormData = (selector) => Object.fromEntries(new FormData(document.querySelector(selector)))
Run Code Online (Sandbox Code Playgroud)

然后只需使用任何选择器进行调用即可,例如: getFormData('#myTargetForm')


Rus*_*ca8 5

扩展 Atrur Klesun 的想法...如果您使用 getElementById 访问表单,则可以通过名称访问它。一行:

document.getElementById('form_id').elements['select_name'].value;
Run Code Online (Sandbox Code Playgroud)

我像单选按钮一样使用它并且工作得很好。我想这里也是一样的。