Javascript / DOM为什么我的表单不支持submit()?

时间:2009-10-16 13:17:44

标签: asp.net javascript dom

这是我第一次使用asp.net和javascript,所以我不知道很多很好的网络资源,或者很多关于调试javascript的知识。我想找出原因 oFormObject.submit(); Microsoft JScript运行时错误:对象不支持此属性或方法。

我正在使用链接功能作为按钮,因为我在美学方面很糟糕,我认为链接看起来比50个按钮的桌子更专业。我读到这个解决方案可能会导致浏览器尝试预渲染我的链接并导致大量额外的流量和问题,但是我发现让按钮看起来像链接的Css似乎有对齐和间距问题。

<!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" >
<head><link rel="stylesheet" type="text/css" href="DefectSeverity.css" /><title>
  Defect Severity Assessment Code List
</title></head>
<body>
<form name="form1" method="post" action="CodeList.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNjQzMTI3NjU4ZGSW2wNBW3eGztyO+Tftc5BB8A6cMg==" />
</div>

<div>
<p>Welcome Maslow</p><SCRIPT language="JavaScript">
function submitForm(intId)
{ oFormObject= document.getElementById(""form"+_StrCodeId + @""");
oFormElement= document.getElementById("codeId");
oFormElement.value=intId;
  oFormObject.submit();
}
</SCRIPT> <form method="post" action="CodeAssessment.aspx" id="formcodeId">
<table name="codeId" id="codeId" value="0" type="hidden" class="linkTable">
<tr>
   <th>Completed</th><th>Code</th><th>Description</th><th>Code Present Since</th>
</tr><tr class="row">
<td><input name="401" type="checkbox" value="401" DISABLED /></td><td><a href="javascript:submitForm(0);">401</a></td><td>Missing Original Document/form</td><td>2009.10.16</td>
</tr><tr class="rowAlternate">
<td><input name="NDMI" type="checkbox" checked="checked" value="NDMI" DISABLED /></td>
<td><a href="javascript:submitForm(1);">NDMI</a></td>
<td>Note date is missing</td>    <td>2009.10.15</td>
</tr>
 </table><input type="submit" />
</form>
</div>
</form>
</body>
</html>

如果我将脚本行更改为oFormObject= document.forms[0];,则会将asp.net的viewstate表单提交回同一页面而不是我想去的地方。所以页面上的其余代码似乎都有效。

6 个答案:

答案 0 :(得分:0)

我不是真正进入asp.net而是使用javascript,所以我说在

中有一个解析错误
oFormObject= document.getElementById(""form"+_StrCodeId + @""");

报价不匹配。我会说你试着把它改成

oFormObject= document.getElementById("formcodeId");

代替

答案 1 :(得分:0)

好吧显然你不能在html / DOM中嵌套表单。我已经改变了我的asp.net提供的表单,现在它导航但崩溃说

Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.

<!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" >
<head><link rel="stylesheet" type="text/css" href="DefectSeverity.css" /><title>
 Defect Severity Assessment Code List
</title></head>
<body>
<form name="form1" method="post" action="CodeAssessment.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNjQzMTI3NjU4ZGSW2wNBW3eGztyO+Tftc5BB8A6cMg==" />
</div>

<div>
<p>Welcome Maslow</p><SCRIPT language="JavaScript">
function submitForm(intId)
{ oFormObject= document.forms[0];
oFormElement= document.getElementById("codeId");
oFormElement.value=intId;
oFormObject.submit();
}

</SCRIPT> <table name="codeId" id="codeId" value="0" type="hidden" class="linkTable">
<tr>
    <th>Completed</th><th>Code</th><th>Description</th><th>Code Present Since</th>
</tr><tr class="row">
    <td><input name="401" type="checkbox" value="401" DISABLED /></td>
<td><a href="javascript:submitForm(0);">401</a></td><td>Missing Original Document/form</td><td>2009.10.16</td>

</tr><tr class="rowAlternate">
    <td><input name="NDMI" type="checkbox" checked="checked" value="NDMI" DISABLED /></td>
<td><a href="javascript:submitForm(1);">NDMI</a></td><td>Note date is missing</td><td>2009.10.15</td>
</tr>
</table><input id="testSubmit" type="submit" />
</div>
</form>
</body>
</html>

答案 2 :(得分:0)

我现在看不出问题是什么,你在答案中发布的代码对我来说运行正常,唯一的问题是我没有CodeAssesment.aspx页面所以我得到一个HTML404错误,但就是这样。 您的原始代码document.getElementById(“”form“+ _ St​​rCodeId + @”“”);无效,并且您没有名为StrCodeId的变量

尝试

oFormObject = document.getElementById("form"+intId);

答案 3 :(得分:0)

好的解决了崩溃问题,所以我又回答了一下,因为你已经复制了源代码并用它再次创建了大纲,我想,因为你不应该把隐藏的输入视图状态作为页面的一部分,它会在构建时自动生成。删除此行并尝试

<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNjQzMTI3NjU4ZGSW2wNBW3eGztyO+Tftc5BB8A6cMg==" />
</div>

答案 4 :(得分:0)

我修剪了动态代码生成部分

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html 
 PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html xmlns="http://www.w3.org/1999/xhtml">
<head><link rel="stylesheet" type="text/css" href="DefectSeverity.css" /><title>
 Defect Severity Assessment Code List
</title><script type="text/javascript">
function submitForm(intId)
{ oFormObject= document.forms[0];
oFormElement= document.getElementById("codeId");
oFormElement.value=intId;
  oFormObject.submit();
}
</script> </head>
<body>
<form name="form1" method="post" action="CodeAssessment.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJMzMxMzk5NjY5ZGTQg8pLRPHaRM4Idd6LyKDmFvMpNA==" />
</div>

<div>
<input type="submit" />
</div>
</form>
</body>
</html>
嘿,再看看另一个div。我不知道这是从哪里来的。我仍然得到viewstate MAC验证失败。如果此应用程序由Web场或群集托管,请确保配置指定相同的validationKey和验证算法。 AutoGenerate不能在群集中使用。

答案 5 :(得分:0)

所以我们在另一个答案中解决了这个问题,但是使用了评论,所以这只是因为其他人都有同样的问题,

这一切都归结为具有runat =“server”属性的表单,这会生成viewstate输入,然后当表单提交到第二页时,它会尝试使用viewstate中的详细信息填充页面,但是在这种情况下,表单被提交到另一个页面,两个页面不匹配,当它尝试处理视图状态输入时,它会抛出错误。

解决方案是删除表单上的runat =“server”属性,或者从第二页设置EnableViewStateMac =“False”属性。