2010-03-30 4 views
1

У меня есть две формы на веб-странице.Проблема с несколькими формами на одной странице

Первый не является фактической формой, так как это сайт на основе .NET. Поэтому вместо этого у меня есть стандартные поля ввода, а также asp: Button PostBackURL = "http:/www ...". Одно из полей - «электронная почта». Это прекрасно работает.

Тогда у меня есть файл XSLT с другой формой, и я использую Javascript (через this.form.action, .method и т. Д.), Чтобы опубликовать эту форму. Кроме того, он имеет те же поля, что и форма выше.

Проблема заключается в том, что когда кто-то подает вторую форму, сценарий в PostBackURL возвращает ошибку, потому что поле «email» появляется пустым. Так что кажется, что форма отправляет поле «email», формируя верхнюю форму вместо текущей.

Я подумал, что, возможно, неправильная форма отправляется, но если я удалю поле «электронная почта» из верхней формы, а затем отправлю нижний, он отлично работает.

Любые идеи о том, как исправить это? Благодарю.

+0

Я предлагаю запустить JS-отладчик (Firebug?), Чтобы узнать, выполняет ли JS свою задачу прямо здесь. – BalusC

ответ

0

Это поле электронной почты отключено? Если это так, некоторые браузеры не будут отправлять данные на сервер. что вы можете сделать, если это так, отключить, включить это поле электронной почты.

+0

Нет, оба являются стандартными полями Jon

+0

Какие браузеры не отправляют отключенное поле формы? Все основные браузеры отправят отключенное поле формы. Атрибут отключен только для предотвращения взаимодействия с пользователем. – Bialecki

+0

IE Я совершенно уверен, что у меня возникли проблемы с тем, что он не отправил отключенные поля формы, но это могло быть в режиме quirks.Обычно я удалял бы мой неточный ответ, но, возможно, это помогло бы кому-то сделать поиск по дороге. – Zoidberg

0

В качестве быстрого исправления взлома вы можете закодировать скрытое текстовое поле электронной почты в эту форму второй/нижней части и иметь в нем текст пустой строки "" или, возможно, фиктивный адрес электронной почты.

Это не проблема, но это должно сделать трюк.

+0

Это позволит избежать ошибки, но тогда кто-то предположил бы, что они действительно зарегистрировались, когда на самом деле фиктивный адрес электронной почты будет отправлен, нет? – Jon

1

Не видя структуру страницы, это может быть выключен (если это так, я извиняюсь):

Вообще говоря, вид, что вы управляете с помощью Javascript (подать) должны быть вне «основной msgstr "сторона стороны сервера 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> 

Это, конечно, предполагает, что вы должны POST данных за пределами вашего приложения ASP.net (в какой-то внешний URL) ....

+0

Хм, но как бы я это сделал, если эта форма находится прямо в середине страницы ASP? Кроме того, я не могу использовать фактический код ASP во второй форме, поскольку эта форма находится в документе XSLT. – Jon

+0

Вы не можете «вставлять» формы, поэтому приведенное выше делает некоторые «хитрости» с JavaScript, если PostbackURL не делает это за вас. Сделав шаг назад - можете ли вы разъяснить, почему Postbackurl не работает для вас? – EdSF

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

Смежные вопросы