Задать вопрос
zorro76
@zorro76

Как пофиксить такое поведение?

У меня есть функция где при выборе checkbox published:
5fa0649cb8797599062403.png
$('#publish-activity').change(function () {
        var reasons = [];
        if (!$('#activity_activity_group_id').val()) {
            reasons.push("select activity group");
        }
        if ($('.activity-content .items .activity-content-item').length == 0) {
            reasons.push("add quiz questions");
        }
       var requiredField = $('.activity-content').find('[required=required]');
        for (var i = 0; i < requiredField.length; i++) {
             if ($(requiredField[i]).val() == '') {
                 $(requiredField[i]).addClass('error');
                 reasons.push("you must fill enter value for all added multiple choice question options"); 
             }
        }
        
        if (this.checked && reasons.length) {
            $('#unpublish-activity')[0].checked = true;
            sweetAlert({
                showCancelButton: false,
                confirmButtonText: 'OK',
                title: 'Cannot publish quiz',
                text: 'In order to publish quiz, ' + _.join(reasons, ', '),
                type: "warning"
            });
        }
    })

она работает - и как результат выводит сообщения об ошибке, но вот сообщение reasons.push("you must fill enter value for all added multiple choice question options") выводится несколько раз (а точнее столько сколько обработано полей)
5fa06335b4359425791773.png

как исправить код что бы сообщение выводилось одной записью на обработку все полей
5fa063e29beed285968587.png
  • Вопрос задан
  • 46 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
DanArst
@DanArst Куратор тега JavaScript
Гриффиндор в моде при любой погоде!
Можно просто считать количество полей с ошибками и если количество будет больше одного, то вывести сообщение. Например так
$('#publish-activity').change(function () {
        var reasons = [];
        if (!$('#activity_activity_group_id').val()) {
            reasons.push("select activity group");
        }
        if ($('.activity-content .items .activity-content-item').length == 0) {
            reasons.push("add quiz questions");
        }
       var requiredField = $('.activity-content').find('[required=required]');
       var cnt = 0;
        for (var i = 0; i < requiredField.length; i++) {
             if ($(requiredField[i]).val() == '') {
                 $(requiredField[i]).addClass('error');
		             cnt++;
             }
		    }	 
	      if (cnt > 1) {
              	 reasons.push("you must fill enter value for all added multiple choice question options");
	      }	
        
        
        if (this.checked && reasons.length) {
            $('#unpublish-activity')[0].checked = true;
            sweetAlert({
                showCancelButton: false,
                confirmButtonText: 'OK',
                title: 'Cannot publish quiz',
                text: 'In order to publish quiz, ' + _.join(reasons, ', '),
                type: "warning"
            });
        }
    })
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
26 дек. 2024, в 15:04
3000 руб./за проект
26 дек. 2024, в 14:50
2000 руб./за проект
26 дек. 2024, в 14:40
15000 руб./за проект