2016-06-25 2 views
0

Как я могу различать два отдельных действия для кнопок отправки в одной форме, тогда как один SAVES-данные в базу данных (как есть) и другие отправляют форму в качестве действительного запроса >>, но < < согласно Собственная валидация HTML5 (Я использую «обязательные» атрибуты в HTML-форме)?Поля ввода в одной форме необходимы для одной кнопки отправки, но не для других?

Моя форма имеет 66 полей, и я не хочу, чтобы проверить их все в PHP ПОСЛЕ представления (как это слишком громоздким и отнимает много времени), или проверить их всех в JS Перед подачей (так как я не что проворно в JS, как и в PHP), поэтому я использую атрибуты «требуемый» и «тип» в HTML5, что очень удобно и довольно универсальный способ проверки (помимо старых браузеров). Однако я не могу найти простой способ обойти «необходимый» атрибут при использовании кнопки сохранения, но не используя кнопку «Отправить для отправки». Можете ли вы помочь предложить решение? Я предполагаю, что предпочтительным способом является некоторый способ JS/jQuery, поскольку я не могу определить, какая кнопка будет использоваться до нажатия кнопки (чтобы я мог сделать поле обязательным или нет).

Пример код:

<form> 
A: <input type="text" name="A" required /> 
B: <input type="text" name="B" required /> 
C: <input type="text" name="C" /> 
<input type="submit" name="save" value="Save"> <!--do not require anything--> 
<input type="submit" name="send" value="Send for submission"> <!-- require everything--> 
</form> 

Конечно моя форма огромна, так как она имеет 66 полеев, так что лучшие решения здесь, возможно, вообще и универсальные.

+1

Если вы не проверяете данные на сервере, просто спрашивайте о проблемах, ленив. Проверка на стороне клиента предназначена исключительно для расширения ux и никогда не следует полагаться. – Doug

+0

Я полностью согласен с вами. Я просто вернусь на стену с течением времени и нуждаюсь в компромиссе здесь ... Это не для наилучшего возможного подхода, но едва жизнеспособного, с обновлением/обновлением как можно скорее. –

ответ

1

Я в конце концов, придумать что-то вроде этого. HTML:

<input type="submit" name="save" value="Save" onClick="removeRequired(this.form)"> 

JS (с использованием JQuery):

function removeRequired(form){ 
    $.each(form, function(key, value) { 
     if (value.hasAttribute("required")){ 
      value.removeAttribute("required"); 
     } 
    }); 
} 

Это проверено и работает. У него есть это приятное свойство, что я могу сохранить функцию в другом месте в файлах, чтобы не сжимать php/html, который ее выполняет. Только улучшение, которое мне бы хотелось (и, возможно, другое было бы интересно), было бы устранение jQuery, поскольку оно используется только для просмотра каждого элемента ввода в форме, что кажется достаточно простым для чистого JS. Однако я не мог найти простой способ, и у меня закончилось время и использовалось выше с jQuery. Спасибо

2

Нечто подобное могло бы, чтобы вы начали:

$('#sub1').click(function() { 
 
    $('[name=A]').removeAttr('required'); 
 
    $('[name=B]').removeAttr('required'); 
 
    $('form').append('<input type="hidden" name="save" />'); 
 
    $('form').submit(); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<form> 
 
    A: <input type="text" name="A" required /><br> 
 
    B: <input type="text" name="B" required /><br> 
 
    C: <input type="text" name="C" /><br> 
 
    <input id="sub1" type="button" name="save" value="Save"> 
 
    <!--do not require anything--> 
 
    <input type="submit" name="send" value="Send for submission"> 
 
    <!-- require everything--> 
 
</form>

+0

Это предполагает jQuery, правильно? –

+0

Да, да. Просто добавьте тег '