我搜索了一个可能的答案,并通过几篇文章让自己有所了解,包括
How to fix "Uncaught TypeError: Cannot call method 'appendChild' of null"和Receiving "InvalidStateError: DOM Exception 11" during websocket.send,但似乎都无法解决我的问题。
保存按钮以将数据从html表单保存到mysql数据库中,直到页面开始出现两个错误之前,它的工作情况都很好
使用Ajax从数据库中动态更新页面上的下拉列表。它们仍然可以正常工作,并且会根据所选的选项自动更新,但是当我单击任何下拉列表时,错误控制台将显示"Uncaught error: InvalidStateError: DOM Exception 11 on createoptions.js line 37
,即xmlhttp.send();
当我单击“保存”按钮时,没有显示任何错误或将数据保存到数据库,而是显示错误Uncaught TypeError: Cannnot call method "submit" of null
。注意,调用submit()方法的对象已经存在。我使用了document.getElementById('studentdata').submit()"
,并且表单Studentdata存在于同一页面上。
请突出显示这些错误的原因以及如何解决这些错误。以下是相关代码。
createoptions.js
function setdepartment(value){
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("departmentselect1").innerHTML=xmlhttp.responseText;
}
}
switch(value){
case "Allied Health Sciences" : xmlhttp.open("GET","deptahs.php",true); break;
case "Engineering and Inter-disciplinary sciences" : xmlhttp.open("GET","depteids.php",true); break;
case "HIMSR" : xmlhttp.open("GET","depthimsr.php",true); break;
case "Islamic Studies and Social Sciences" : xmlhttp.open("GET","deptisss.php",true); break;
case "Management and Information Technology" : xmlhttp.open("GET","deptmanagement.php",true); break;
case "Medicine (Unani)" : xmlhttp.open("GET","deptmedicine.php",true); break;
case "Nursing" : xmlhttp.open("GET","deptnursing.php",true); break;
case "Pharmacy" : xmlhttp.open("GET","deptpharmacy.php",true); break;
case "Science" : xmlhttp.open("GET","deptscience.php",true); break;
}
xmlhttp.send();
}
page.php,引用的行是
<li><a class="button black" form="studentdata" onclick="document.getElementById('studentdata').submit()">Save</a></li>
<div class="navbutton">
<aside>
<ul>
<li><a class="button black" href="logout.php">Logout</a></li>
<li><a class="button black" onclick="addRow()">Add Row</a></li>
<li><a href="#searchbox" class="button black" onclick="showsearch()">Search</a></li>
<li><a href="#promotediv" class="button black" onclick="showpromote()">Promote</a></li>
<li><a class="button black" form="studentdata" onclick="document.getElementById('studentdata').submit()">Save</a></li>
</ul>
</aside>
</div>
<form id="studentdata" action="savedata.php" method="POST">
<div style=" padding-left:350px; ">
<div class="dropdown dropdown-dark">
<select name="facultyselect1" id="facultyselect1" style="width:300px;" class="dropdown-select " onfocus="setdepartment(this.value)" onchange="setdepartment(this.value)" required>
<option value="">Select an option</option>
<div id="facultyselect1">
<?php
@ $db = mysql_connect("localhost", "root", "");
mysql_select_db("university");
$strSQL = "SELECT facultyname FROM faculty";
$rs = mysql_query($strSQL);
$nr = mysql_num_rows($rs);
for ($i=0; $i<$nr; $i++) {
$r = mysql_fetch_array($rs);
echo "<OPTION VALUE=\"".$r["facultyname"]."\">".$r["facultyname"]."</OPTION>";
}
?>
</div>
</SELECT>
</div>
<div class="dropdown dropdown-dark">
<select name="departmentselect1" id="departmentselect1" class="dropdown-select" onchange="setcourse(this.value)" onfocus="setcourse(this.value)" required>
<option value="">Select an option</option>
<div id="departmentselect1">
</div>
</select>
</div>
</div>
</form>
最佳答案
您的第一个错误"Uncaught error: InvalidStateError: DOM Exception 11 on createoptions.js line 37
是由操作DOM引起的。我认为这可能与以下事实有关:您有两个ID为departmentselect1
的元素,或者具有相同ID的div是无效的语法,因为它不能是select
元素的子元素。您可以在Chrome中单击此错误旁边的箭头,并将其追溯到实际发生的地方。 Similar question。Uncaught TypeError: Cannnot call method "submit" of null
表示document.getElementById('studentdata')
不匹配任何元素,因此返回null
。 null
没有方法,因此将引发此错误。这很奇怪,但是由于您的表单具有双ID,语法无效,因此可能具有未定义的行为。尝试解决第一个问题,它可能会神奇地解决另一个问题。
编辑:
我仍然认为您应该在value
函数中为不起作用的菜单调试setdepartment
的值。如果该值与任何情况都不匹配,则函数将具有什么行为?不起作用的菜单的响应数据是什么?
关于javascript - InvalidStateError:DOM异常11和Uncaught TypeError:无法调用null的方法“提交”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17495545/