Javascript错误:对象#<;HTMLFormElement>;没有方法';getElementBy


Javascript error: Object #<HTMLFormElement> has no method 'getElementById'

我收到一个Javascript错误:Object#没有方法"getElementById"。我正在尝试使用一个按钮,将所选元素转移到HTML中的另一个选择框中。我到处都找过,但没有人解决方案似乎对我有效=''

Javascript

<script language="javascript">
function addDivision()
{
    var selected = document.frmSubmit.getElementById("selectedDivisions");
    var div = document.frmSubmit.getElementById("divisions");
    var divId = div.options[div.selectedIndex].value;
    var divText = div.options[div.selectedIndex].text;
    var newOption = document.frmSubmit.createElement(divId);
    newOption.text = divText;
    selected.add(newOption,null);
}
</script>

HTML

<div id="content">
<form id="frmSubmit" name="frmSubmit" action="">

<div id="Step1Content">
    <h2 style="float:left">Step 1:</h2><p style="float:left; padding-top:10px; padding-left:20px;">Select your divisions</p>
    <div style="clear:both">
        <select id= "divisions" name="divisions" size="8">
    <?  //Getting divisions based on League_id
        $getDivisionsSQL = "Select * FROM level WHERE League_ID = '1' AND disabled = '0'";
        $getDivisionsQuery = $db->Query($getDivisionsSQL);
        while( $divRow = $db->GetRow($getDivisionsQuery) )
        {
            echo "<option id=".$divRow['id'].">".$divRow['description']."</option>";
        }
    ?>
        </select>
    <?  
        echo "<img id='doAdd' width='40px' height='25px' style='position: relative; bottom:75px; cursor:pointer;' src='".$baseImagesPath."greenArrow.png'/>";
        echo "<img id='doAdd' width='40px' height='25px' cursor:pointer; style='position: relative; bottom: 25px; right:40px; cursor:pointer;' src='".$baseImagesPath."redArrow.png'/>";
    ?>  
        <select style="position:relative; right:40px;" name="selectedDivisions" id="selectedDivisions" size="8">
    <?  //List of divisions to use
    ?>  <option>Apple</option>
        </select>
    </div>
</div>


<div style="padding-top:50px; padding-left:50px; width:100%; float:left; ">
    <h2 style="float:left">Step 2:</h2><p style="float:left; padding-top:10px; padding-left:20px;">Select the starting date of games</p>
</div>
<div style="padding-top:50px; padding-left:50px; width:100%; float:left">
    <h2 style="float:left">Step 3:</h2><p style="float:left; padding-top:10px; padding-left:20px;">Select the total number of weeks in the season</p>
<div style="padding-top:50px; width:100%; float:left">
    <input type="submit" value="Create Schedule">
</div>
</div>
</form>
</div>

发生此问题是因为您试图从节点元素使用getElementById,而此方法属于document。仔细想想,这是合乎逻辑的:id在页面内应该是唯一的,因此使用dom元素按id"过滤"元素是没有意义的。

所以,如果你从:

document.frmSubmit.getElementById("selectedDivisions");

至:

document.getElementById("selectedDivisions");

一切都应该按预期进行。


附带说明一下,节点元素支持getElementsByTagNamegetElementsByClassName,它们用于选择与指定的标记/类的名称匹配的所有子节点。

检查API参考:https://developer.mozilla.org/en-US/docs/Web/API/element

表单对象的类型为HTMLFormElement。如前所述,您可以在document上调用getElementById,但不能在element上调用,包括不能在HTMLFormElement上调用。

但是表单包含元素,并且在给定HTML表单元素对象的情况下,人们希望访问该表单元素中的特定元素是合理的,那么如何做到这一点呢?

您的HTMLFormElement提供了一个名为elements的属性。访问HTMLFormElement上的elements会生成一个HTMLFormControlsCollection,其中包含表单中的元素。HTMLFormControlsCollection派生自类型HTMLCollectionHTMLFormControlsCollection有一个只读属性和两个方法。

属性是length,它返回在集合中找到的元素的计数(在本例中,这些元素将是表单元素中的元素)。

这两种方法是:

  • item(index)-返回指定的基于零的索引处的特定节点。如果index超出范围,则返回null
  • namedItem(id)-返回ID或名称与ID指定的字符串匹配的特定节点。按名称匹配仅作为最后手段,仅在HTML中进行,并且仅当引用的元素支持name属性时进行。如果给定的id/name不存在任何节点,则返回null

因此,如果有一个类型为HTMLFormElement的表单对象,那么解决方案是访问该对象的elements属性,使用要从HTMLFormElement中检索的元素的id对其调用namedItem( id )

语法为:

let element_obj = form_obj.elements.namedItem( id )

其中form_obj是您的HTMLFormElementid是要访问的表单中元素的id。

您试图使用的函数属于DOMDocument,而不是DOMElementMDN)。

document.getElemendById()

您的代码的有效版本实际上是:

document.getElementById("selectedDivisions");

注意:ID属性应该是唯一的,这意味着如果文档中有两个或多个元素具有相同的ID,则W3c会将页面视为无效

我会尝试使用jQuery。您可以从一个select中获取所需的元素,并将其附加到另一个select。

    $('#selectedDivisions').append($('#divisions'));