关于form.elements的javascript

时间:2016-01-14 09:23:08

标签: javascript forms

我是一个JavaScript新手,Private Sub node_AfterCheck(sender As Object, e As TreeViewEventArgs) Handles TreeView1.AfterCheck If e.Action <> TreeViewAction.Unknown Then Task.Factory.StartNew(Sub() GetPolygons(e.Node) End Sub, TaskCreationOptions.LongRunning) End If End Sub Private Sub GetPolygons(node As TreeNode) Dim objectId As String Dim _polygon As GMapPolygon For Each node1 As TreeNode In node.Nodes objectId = node1.Name For Each _polygon In polyOverlay.Polygons.AsParallel itemTag = _polygon.Tag.ToString.Split("|") If itemTag (0) = node1.Name Then _polygon.IsVisible = node.Checked Exit For End If Next Next End sub 让我感到困惑。我有一个这样的演示:

&#13;
&#13;
form.elements
&#13;
&#13;
&#13;

为什么这会返回3个元素而不是5个元素?我认为答案应该是5个元素(<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script type="text/javascript"> function js() { var myform = document.forms[0]; alert(myform.elements.length); } </script> </head> <body onload="js()"> <form> <fieldset> this is a demo: <p> this is a p element</p> <label> this is a label element </label><br/> <input type="text" value="abc"/> <button type="button">click me</button> </fieldset> </form> </body> </html>fieldsetplabelinput),因为W3Schools表示&#34; button返回表单中所有元素的集合&#34;,但浏览器告诉我只有3个元素。为什么呢?

5 个答案:

答案 0 :(得分:3)

它不会返回plabel元素(或者您在那里的<br>元素),因为它们不是列出表单元素(见下文)。

  

HTMLFormElement.elements属性返回HTMLFormControlsCollection元素中包含的所有表单控件的HTMLCollection(HTML 4 FORM),但input除外具有type图像属性的元素。

     

- MDN's Notes on HTMLFormElement.element

HTMLFormElements.elements返回的元素在HTML规范中称为listed elements表单关联元素的子类别中进行集体化:

  

列出的元素
  表示form.elementsfieldset.elements API中列出的元素。

     
    

buttonfieldsetinputkeygenobjectoutputselecttextarea

  

答案 1 :(得分:1)

在您的代码中,只有以下是form elements

[fieldset, input, button]

这些是可能的表单元素的名称

<button>, <fieldset>, <input>, <output>, <progress>, <select>, <textarea>.

检查此fiddle

我已经放置了一个控制台日志来显示哪些表单元素

function js() {
    var myform = document.forms[0];
    console.log( myform.elements );
  }

答案 2 :(得分:0)

这是因为plabel不是表单元素。我们有以下表单元素,如

  • 输入
  • 选择
  • textarea的
  • 按钮
  • 数据列表
  • 密钥生成
  • 输出

答案 3 :(得分:0)

您的代码将3个元素显示为表单元素fieldset(HTMLFieldSetElement),input(HTMLInputElement)&amp; button(HTMLButtonElement)。 labelp不会被视为表单元素。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script type="text/javascript">
  function js() {
    var myform = document.forms[0];
    alert.log(myform.elements.length);
for(var i=0;i<myform.elements.length;i++)
		{
			alert(myform.elements[i]);
		}
  }
  </script>
</head>
<body onload="js()">
  <form>
    <fieldset> this is a demo:
      <p> this is a p element</p>
      <label> this is a label element </label><br/>
      <input type="text" value="abc"/>
      <button type="button">click me</button>
    </fieldset>
  </form> 
</body>
</html>

答案 4 :(得分:0)

plabel元素不是表单元素,因此当您想要计算表单元素的数量时,它会3

顺便说一下,如果你想知道以下元素是一个表单元素:

<form>  Defines an HTML form for user input

<input> Defines an input control

<textarea>  Defines a multiline input control (text area)

<label> Defines a label for an <input> element

<fieldset>  Groups related elements in a form

<legend>    Defines a caption for a <fieldset> element

<select>    Defines a drop-down list

<optgroup>  Defines a group of related options in a drop-down list

<option>    Defines an option in a drop-down list

<button>    Defines a clickable button

<datalist>  Specifies a list of pre-defined options for input controls

<keygen>    Defines a key-pair generator field (for forms)

<output>    Defines the result of a calculation