2015-08-20 21 views
0

мне нужно убедиться, что если хотя бы один флажок (из многих) не отмечен, то форма обыкновение представлять, это то, что у меня есть на данный момент, я подумал, что это должно работать:Form Validation - Несколько флажков

<script type="text/javascript"> 
function valthis() { 
var checkBoxes = document.getElementsByClassName('myCheckBox'); 
var isChecked = false; 
for (var i = 0; i < checkBoxes.length; i++) { 
    if (checkBoxes[i].checked) { 
     isChecked = true; 
    }; 
    }; 
    if (!isChecked) { 

    alert('Please, check at least one checkbox!'); 
    return false; 
    } 
    } 

</script> 

Буду признателен за любую помощь, которую я могу получить !!!

приветствия, Мейсон.

+0

Так что ваш код не работает. Что это значит? Вызывается ли исключение? – johnnyRose

+0

Как подать форму, есть ли кнопка отправки? Когда вызывается * valthis *? Что значит «Я думал, что это должно работать»? Форма всегда отправляется? Не подавать? Бросить ошибки? ...? – RobG

ответ

1

Это выглядит хорошо, но вы должны позвонить valthis() перед отправкой формы, которую вы бы сделали «вручную» в своем коде после проверки того, что все в порядке.

В основном, это означает, что у вас есть базовые кнопки (не "представить" один), что на самом деле вызывает valthis:

<input type="button" onClick="valthis()" ></input> 

Затем в конце valthis():

document.getElementById("myForm").submit(); 
+0

Для элементов ввода нет закрывающего тега. Кнопка должна быть кнопкой отправки, слушатель должен находиться в обработчике отправки формы, и нет необходимости вызывать * form.submit *. – RobG

+0

Я не согласен. Если есть действие отправки формы, использование кнопки отправки пропустит проверку. – alcfeoh

+0

Нет, не будет. Это наиболее рекомендуемый способ применения проверки формы, основной причиной является то, что формы могут быть представлены без нажатия кнопки любого типа. – RobG

0

У вас есть не предоставлены подробные сведения о вашей реальной проблеме, поэтому невозможно точно сказать, что происходит.

Это то, что вам должно быть есть, есть ли у вас на самом деле спорный вопрос. Там должно быть представить слушателя форме:

<form onsubmit="return valthis(this)" ... > 

Там должна быть кнопка отправки в виде:

<input type="submit"> 

или

<button>Submit</button> 

Передать слушатель должен вернуть ложные отменить подачу или любое другое значение, которое не будет отменено. Функция должна иметь более значимое имя, скажем, «checkCheckboxes», и цикл может вернуться, как только клетчатый флажок найдено:

function valthis() { 

    var checkBoxes = document.getElementsByClassName('myCheckBox'); 
    var isChecked = false; 

    // Break from loop if isChecked is true 
    for (var i = 0; i < checkBoxes.length && !isChecked; i++) { 
    isChecked = checkBoxes[i].checked; 
    } 

    return isChecked; 
} 

Там нет необходимости в точку с запятой после блока, он будет представлять собой пустое заявление (ничего вредного, просто лишнего).

Если бы вы могли гарантировать поддержку современных интерфейсов, то:

<form onsubmit="return this.querySelectorAll('input[type=checkbox]:checked').length > 0;" ...> 

будет делать.