2010-03-30 65 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

相关问题