#javascript #jquery #forms #validation
#javascript #jquery #формы #проверка
Вопрос:
у меня есть пара групп переключателей на моей веб-странице, и вот как я решил проверить группы
function validateAppRXForm() {
if($('input[name="creativity"]:checked').length == 0 ||
$('input[name="intelligence"]:checked').length == 0 ||
$('input[name="initiative"]:checked').length == 0 ||
$('input[name="motivation"]:checked').length == 0 ||
$('input[name="development"]:checked').length == 0 ||
$('input[name="vision"]:checked').length == 0 ||
$('input[name="Integrity"]:checked').length == 0 ||
$('input[name="Confidentiality"]:checked').length == 0 ||
$('input[name="Interpersonal"]:checked').length == 0 ||
$('input[name="speed"]:checked').length == 0 ||
$('input[name="accuracy"]:checked').length == 0 ||
$('input[name="ability"]:checked').length == 0 ||
$('input[name="assessmnt"]:checked').length == 0 ||
$('input[name="errors"]:checked').length == 0){
alert('some fields were left blank..');
// alert('some fields were left blank...');
return false;
}
}
но я чувствую, что может быть лучший способ, когда я передаю имена из массива .. поэтому я решил сделать это, используя названия переключателей
//create the array by splitting string names....
let arr = String('creativity;intelligence;initiative;motivation;development;vision;Integrity;Confidentiality;Interpersonal;speed;$accuracy;ability;assessmnt;errors').split(';');
//loop through and validate...
function validateAppRXForm() {
arr.forEach(name => {
if($('input[name=`${name}`"]:checked').length == 0){
alert('some fields were left blank..');
return false;
}
});
}
но это не работает…
Комментарии:
1. @mplungjan это все еще работает, я просто предпочитаю использовать его…
2. Обратите внимание, что
return
inforEach
не возвращает во внешнюю функцию. Использованиеsome()
было бы более чистым подходом
Ответ №1:
Вы можете использовать Array#every()
with is(':checked')
как более короткий способ записи, чем проверка длины
//create the array by splitting string names....
let arr = 'creativity;intelligence;initiative'.split(';');
function isValid(){
return arr.every(name => $(`input[name='${name}']`).is(':checked'))
}
console.log('On load:', isValid())
// check one of each
arr.forEach(name => $(`input[name='${name}']`).first().prop('checked', true))
console.log('After checked:', isValid())
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form>
Creativity:
<label><input type="radio" name="creativity" value="yes" />Yes</label>
<label><input type="radio" name="creativity" value="no" />No</label>
<br/> Intelligence:
<label><input type="radio" name="intelligence" value="yes" />Yes</label>
<label><input type="radio" name="intelligence" value="no" />No</label>
<br/> Initiative:
<label><input type="radio" name="initiative" value="yes" />Yes</label>
<label><input type="radio" name="initiative" value="no" />No</label>
<br/>
<input type="submit" />
</form>
Комментарии:
1. Отличный вариант……. Вы не выполняете проверку при отправке, но все равно приятно
Ответ №2:
Вот так, хотя я рекомендую не использовать непроверенные радиобоксы, а вместо этого выбирать, если вы хотите протестировать выбор none / a / b.
//create the array by splitting string names....
let arr = 'creativity;intelligence;initiative'.split(';');
$(function() {
$("form").on("submit", function(e) {
if (arr.filter(item => $(`input[name=${item}]:checked`).length === 0).length > 0) {
console.log("some rads not checked");
e.preventDefault();
}
})
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form>
Creativity:
<label><input type="radio" name="creativity" value="yes" />Yes</label>
<label><input type="radio" name="creativity" value="no" />No</label>
<br/> Intelligence:
<label><input type="radio" name="intelligence" value="yes" />Yes</label>
<label><input type="radio" name="intelligence" value="no" />No</label>
<br/> Initiative:
<label><input type="radio" name="initiative" value="yes" />Yes</label>
<label><input type="radio" name="initiative" value="no" />No</label>
<br/>
<input type="submit" />
</form>