簡體   English   中英

Javascript / DOM為什么我的表單不支持Submit()?

[英]Javascript/DOM Why is does my form not support submit()?

這是我第一次使用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表單,該表單回發到同一頁面而不是我要去的地方。 因此頁面上的其余代碼似乎可以正常工作。

我不是真的喜歡asp.net,而是喜歡javascript,所以我說在其中存在解析錯誤

oFormObject= document.getElementById(""form"+_StrCodeId + @""");

引號不匹配。 我會說你嘗試將其更改為

oFormObject= document.getElementById("formcodeId");

代替

好的,顯然您不能將表單嵌套在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>

我看不出現在是什么問題,您在答案中發布的代碼對我來說效果很好,唯一的問題是我沒有CodeAssesment.aspx頁面,所以我收到了HTML404錯誤,僅此而已。 您的原始代碼document.getElementById(“” form“ + _ St​​rCodeId + @”“”); 是無效的,並且您沒有名為StrCodeId的變量,

嘗試

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

好了,解決了當機問題,所以我提出了另一個答案,因為您已經復制了源代碼,並使用它再次創建了大綱,我想,因為您不應該將隱藏的輸入viewstate作為頁面的一部分,所以它可以在生成時自動生成。 刪除此行並嘗試

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

我整理了動態代碼生成部分

<?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和驗證算法。 自動生成不能在群集中使用。

因此,我們在另一個答案中解決了這個問題,但是使用了注釋,以防萬一其他人遇到相同的問題,

一切都歸結到具有runat =“ server”屬性的表單,這將生成viewstate輸入,然后將表單提交到第二頁時,它將嘗試使用viewstate的詳細信息填充頁面,但是就像這樣如果表單提交到另一頁,則這兩個頁面不匹配,並且當它嘗試處理viewstate輸入時會引發錯誤。

解決方案是刪除表單上的runat =“ server”屬性,或者從第二頁設置EnableViewStateMac =“ False”屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM