Всякий раз, когда вы пытаетесь сравнить строки, сравните их по отношению к каждому символу. Для этого вы можете использовать встроенную строковую функцию strcmp (input1, input2); и вы должны использовать заголовочный файл с именем #include<string.h>
Попробуйте этот код:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char s[]="STACKOVERFLOW";
char s1[200];
printf("Enter the string to be checked\n");//enter the input string
scanf("%s",s1);
if(strcmp(s,s1)==0)//compare both the strings
{
printf("Both the Strings match\n");
}
else
{
printf("Entered String does not match\n");
}
system("pause");
}
Одним словом, нет. Вы можете иметь несколько форм на странице, но они не должны быть вложенными.
Из рабочей страницы html5 :
4.10.3
form
elementМодель контента:
Содержимое потока, но без потомков элемента формы.
Вы также можете использовать formaction = "" внутри тега кнопки.
<button type="submit" formaction="/rmDog" method='post' id="rmDog">-</button>
Это было бы вложено в исходную форму как отдельная кнопка.
Я столкнулся с подобной проблемой, и я знаю, что это не ответ на вопрос, но он может помочь кому-то с такой проблемой: если необходимо поместить элементы двух или более форм в данная последовательность, атрибут HTML5 <input> form
может быть решением. Из http://www.w3schools.com/tags/att_input_form.asp :
- Атрибут формы является новым в HTML5.
- Определяет, к какому элементу
<form>
принадлежит элемент<input>
. Значение этого атрибута должно быть атрибутом id элемента<form>
в том же документе.Сценарий:
- input_Form1_n1
- input_Form2_n1
- input_Form1_n2
- input_Form2_n2
Реализация:
<form id="Form1" action="Action1.php" method="post"></form> <form id="Form2" action="Action2.php" method="post"></form> <input type="text" name="input_Form1_n1" form="Form1" /> <input type="text" name="input_Form2_n1" form="Form2" /> <input type="text" name="input_Form1_n2" form="Form1" /> <input type="text" name="input_Form2_n2" form="Form2" /> <input type="submit" name="button1" value="buttonVal1" form="Form1" /> <input type="submit" name="button2" value="buttonVal2" form="Form2" />
Здесь вы найдете совместимость браузера.
Сегодня я также застрял в одной и той же проблеме и решил проблему, я добавил пользовательский элемент управления, и на этом элементе управления я использую этот код
<div class="divformTagEx">
</div>
<asp:Literal runat="server" ID="litFormTag" Visible="false">
'<div> <form style="margin-bottom: 3;" action="http://login.php" method="post" name="testformtag"></form> </div>'</asp:Literal>
и в событии PreRenderComplete для вызова страницы this метод
private void InitializeJavaScript()
{
var script = new StringBuilder();
script.Append("$(document).ready(function () {");
script.Append("$('.divformTagEx').append( ");
script.Append(litFormTag.Text);
script.Append(" )");
script.Append(" });");
ScriptManager.RegisterStartupScript(this, GetType(), "nestedFormTagEx", script.ToString(), true);
}
Я считаю, что это поможет.
Простым обходным путем является использование iframe для хранения «вложенной» формы. Визуально форма вложенная, но со стороны кода ее в отдельный html-файл вообще.
Использовать пустой тег формы перед вашей вложенной формой
Протестировано и работает в Firefox, Chrome
Не проверено на I.E.
<form name="mainForm" action="mainAction">
<form></form>
<form name="subForm" action="subAction">
</form>
</form>
Обычный html не позволяет вам это делать. Но с javascript вы сможете это сделать. Если вы используете javascript / jquery, вы можете классифицировать элементы формы с классом, а затем использовать serialize () для сериализации только тех элементов формы для подмножества элементов, которые вы хотите отправить.
<form id="formid">
<input type="text" class="class1" />
<input type="text" class="class2">
</form>
Тогда в вашем javascript вы можете сделать это, чтобы сериализовать элементы класса1
$(".class1").serialize();
Для класса2 вы могли бы сделать
$(".class2").serialize();
Для всей формы
$("#formid").serialize();
или просто
$("#formid").submit();
Как сказал Крэйг, нет.
Но в отношении вашего комментария относительно , почему :
Возможно, было бы проще использовать 1 <form>
с входы и кнопку «Обновить», а также использовать скрытые вставки с кнопкой «Отправить заказ» в другой <form>
.
Обратите внимание: вам не разрешено вставлять элементы FORM!
http://www.w3.org/MarkUp/html3/forms.html
https://www.w3.org/TR/html4/appendix/changes.html#hA.3.9 (примечания спецификации html4 нет изменений относительно форм вложения от 3.2 до 4)
https://www.w3.org/TR/html4/appendix/changes.html#hA.1.1.12 (примечания спецификации html4 нет изменений в формах вложения от 4.0 до 4.1)
https://www.w3.org/TR/html5-diff/ (примечания спецификации html5 не изменяются в отношении форм вложенности от 4 до 5)
https://www.w3.org/TR/html5/forms.html#association-of-controls-and-forms комментарии к «Эта функция позволяет авторам работать отсутствие поддержки вложенных элементов формы. », но не цитирует, где это указано, я думаю, что они предполагают, что мы должны предположить, что он указан в спецификации html3:)
Даже если вы можете заставить его работать в одном браузере, нет никакой гарантии, что он будет работать одинаково во всех браузерах. Поэтому, хотя вы можете заставить его работать с некоторыми времени, вы, конечно, не сможете заставить его работать все времени.
Пока я не предлагаю решение вложенных форм (это не работает надежно), я предоставляю обходной путь, который работает для меня:
Сценарий использования: суперформа, позволяющая изменять N элементов однажды. Он имеет кнопку «Отправить все» внизу. Каждый элемент хочет иметь свою собственную вложенную форму с кнопкой «Отправить элемент № N». Но не может ...
В этом случае можно фактически использовать одну форму, а затем иметь имя кнопок submit_1
.. submit_N
и submitAll
и обрабатывать их на стороне сервера, только глядя на параметры, оканчивающиеся на _1
, если имя кнопки было submit_1
.
<form>
<div id="item1">
<input type="text" name="foo_1" value="23">
<input type="submit" name="submit_1" value="Submit Item #1">
</div>
<div id="item2">
<input type="text" name="foo_2" value="33">
<input type="submit" name="submit_2" value="Submit Item #2">
</div>
<input type="submit" name="submitAll" value="Submit All Items">
</form>
Хорошо, поэтому не так много, но это делает работу.
Другой способ обойти эту проблему, если вы используете язык сценариев на стороне сервера, который позволяет вам манипулировать опубликованными данными, заключается в том, чтобы объявить вашу форму html следующим образом:
<form>
<input name="a_name"/>
<input name="a_second_name"/>
<input name="subform[another_name]"/>
<input name="subform[another_second_name]"/>
</form>
Если вы напечатайте опубликованные данные (я буду использовать PHP здесь), вы получите такой массив:
//print_r($_POST) will output :
array(
'a_name' => 'a_name_value',
'a_second_name' => 'a_second_name_value',
'subform' => array(
'another_name' => 'a_name_value',
'another_second_name' => 'another_second_name_value',
),
);
Тогда вы можете просто сделать что-то вроде:
$my_sub_form_data = $_POST['subform'];
unset($_POST['subform']);
Your $ _POST теперь имеет только ваши данные «основной формы», а ваши данные подформы хранятся в другой переменной, которую вы можете манипулировать по желанию.
Надеюсь, что это поможет!
Если вы используете AngularJS, все теги <form>
внутри вашего ng-app
заменяются во время выполнения с помощью директив ngForm
, которые предназначены для вложенности.
В угловых формах быть вложенным. Это означает, что внешняя форма действительна, когда все дочерние формы также действительны. Однако браузеры не допускают вложенности элементов
<form>
, поэтому Angular предоставляет директивуngForm
, которая ведет себя одинаково с<form>
, но может быть вложенной. Это позволяет вам иметь вложенные формы, что очень полезно при использовании угловых директив проверки в формах, которые динамически генерируются с помощью директивыngRepeat
. ( источник )
У вас даже возникнут проблемы с работой в разных версиях одного и того же браузера. Поэтому не используйте это.
Хотя вопрос довольно старый, и я согласен с тем, что вложенность формы не допускается в HTML
. Но это все, что угодно, возможно, захочет увидеть это
, где вы (я называю это взломом, так как я уверен, что это не является законным) html, чтобы браузер имел вложенную форму
<form id="form_one" action="http://apple.com">
<div>
<div>
<form id="form_two" action="/">
<!-- DUMMY FORM TO ALLOW BROWSER TO ACCEPT NESTED FORM -->
</form>
</div>
<br/>
<div>
<form id="form_three" action="http://www.linuxtopia.org/">
<input type='submit' value='LINUX TOPIA'/>
</form>
</div>
<br/>
<div>
<form id="form_four" action="http://bing.com">
<input type='submit' value='BING'/>
</form>
</div>
<br/>
<input type='submit' value='Apple'/>
</div>
</form>
JS FIDDLE LINK
Вторая форма будет проигнорирована, см. фрагмент из WebKit, например:
bool HTMLParser::formCreateErrorCheck(Token* t, RefPtr<Node>& result)
{
// Only create a new form if we're not already inside one.
// This is consistent with other browsers' behavior.
if (!m_currentFormElement) {
m_currentFormElement = new HTMLFormElement(formTag, m_document);
result = m_currentFormElement;
pCloserCreateErrorCheck(t, result);
}
return false;
}
О формах вложенности: я потратил 10 лет на один день, пытаясь отладить сценарий ajax.
мой предыдущий ответ / пример не учитывал разметку html, извините.
<form id='form_1' et al>
<input stuff>
<submit onClick='ajaxFunction(That_Puts_form_2_In_The_ajaxContainer)' >
<td id='ajaxContainer></td>
</form>
form_2 постоянно пропадал, говоря недействительный form_2.
Когда я переместил ajaxContainer, который создал form_2 <i>outside</i>
формы_1, я снова был в бизнесе. Это ответ на вопрос, почему можно вложить формы. Я имею в виду, действительно, каков идентификатор, если бы не определить, какая форма должна использоваться? Должна быть лучшая, гладкая работа.