2010-03-30 63 views
1

我在網頁上有兩種表單。一頁上有多個表單的問題

第一個不是實際的表單,因爲這是一個基於.NET的網站。所以相反,我有標準輸入字段,以及asp:Button PostBackURL =「http:/ www ...」。其中一個領域是「電子郵件」。這工作正常。

然後我有另一種形式的XSLT文件,並且正在使用Javascript(通過this.form.action,.method等)發佈該表單。除此之外,它與上面的表單具有相同的字段。

問題是,當有人提交第二個表單時,PostBackURL上的腳本返回一個錯誤,因爲「email」字段顯示爲空。所以看起來好像表單是從頂層窗體而不是當前窗體提交「email」字段。

我想也許錯誤的表單正在提交,但如果我從頂部窗體中刪除「電子郵件」字段,然後提交底部的一個,它可以正常工作。

有關如何解決此問題的任何想法?謝謝。

+0

我建議運行JS調試器(Firebug?)來查看JS是否在這裏執行任務。 – BalusC 2010-03-30 18:38:18

回答

0

是否禁用了該電子郵件字段?如果是這樣,一些瀏覽器不會將數據發送到服務器。您可以做什麼,如果是,請提交,啓用該電子郵件字段。

+0

不,都是標準字段 – Jon 2010-03-30 19:15:34

+0

哪些瀏覽器不提交禁用的表單域?所有主流瀏覽器都會提交禁用的表單字段。 disabled屬性僅僅是爲了防止用戶交互。 – Bialecki 2010-03-31 02:37:25

+0

IE我很肯定,我沒有提交禁用的表單域,但是這可能是在怪癖模式。通常我會刪除不準確的答案,但它可能有助於某人在路上進行搜索。 – Zoidberg 2010-03-31 11:35:20

0

作爲一個快速修復黑客,您可以將隱藏的電子郵件文本框編碼到第二個/底部窗體中,並且文本爲空字符串""或者也許是一個虛擬電子郵件。

它沒有解決問題,但它應該做的伎倆。

+0

這樣可以避免這個錯誤,但是有人會認爲他們實際上只是在發送虛擬電子郵件時才註冊,不是嗎? – Jon 2010-03-30 19:15:05

1

在沒有看到頁面的結構,這可能是關閉(如果是的話,我道歉):

一般來講,你是通過JavaScript控制的形式(提交)應該是外面的「主「asp.net服務器端表單。

所以結構:

<html> 
<body> 
    <form id="the_asp_net_server_side_form" runat="server">  
    ....asp.net controls, content, etc..... 
    ....this section is the server-side asp.net form..... 
    </form> 

    <form id="standard_html_form1" action="blah"> 
     ....standard html <input> fields 
     ....do whatever you want with javascript 
     ....if you need to use "old school/legacy" asp style <%= %> code, do so 
    </form> 

    <form id="standard_html_form2" action="blah"> 
     ....standard html <input> fields 
     ....do whatever you want with javascript 
     ....if you need to use "old school/legacy" asp style <%= %> code, do so 
    </form> 
</body> 
</html> 

這當然假定你需要你的ASP.net應用程序之外POST數據(一些外部URL)....

+0

嗯,但我該怎麼做,如果這種形式是正確的ASP頁面的中間? 另外,我不能在第二種形式中使用實際的ASP代碼,因爲該表單在XSLT文檔中。 – Jon 2010-03-30 19:16:53

+0

你不能「嵌套」表單,所以如果PostbackURL不適合你,上面的代碼會對JavaScript做一些「欺騙」。 退一步 - 你能否澄清爲什麼Postbackurl不適合你? – EdSF 2010-03-30 22:24:47

0

我會檢查HTML通過查看源代碼,但可能的罪魁禍首是您不能在HTML中嵌套表單。如果您在HTML中嵌套表單,則會忽略內部表單並提交外部表單。

<form id="outer" onsubmit="alert('outer');return false;"> 
    <form id="inner" onsubmit="alert('inner');return false;"> 
     <input type="submit" value="Go" /> 
    </form> 
</form> 

您可以在此演示此行爲:http://jsfiddle.net/eRZQD/

鑑於此,很可能您嘗試提交內部表單,但實際上正在提交外部表單,其中包含導致錯誤的空白電子郵件字段。你一定會想要刪除嵌套或重寫HTML,這樣內部的提交按鈕的作用與外部提交按鈕稍有不同。

+0

你案例如何提交內部表單? – PerlDev 2011-01-31 03:49:20

相關問題