jQuery - значения полей и сравнения

0

Я делаю проверку формы и хочу проверить количество значений переключателей. По умолчанию значения не выбраны. Для каждого вопроса есть два варианта - да и нет.

Сначала я скрываю "предупреждающее сообщение" и проверяю, когда один из входов изменяется. То, что я хочу, это когда все параметры имеют значение no (значение равно N), тогда появится сообщение об ошибке, иначе оно будет скрыто. Я хочу, чтобы, если какой-либо из параметров затем изменится на yes, сообщение об ошибке скроется. Что происходит здесь, если какое-либо из значений изменено на yes, появляется сообщение об ошибке. Может быть, я слишком усложняю, как это должно работать?

$('.cautionMessage').hide();
$('.weeeDetailsChange input').change(function () {
    var ownBrand = $('input[name="ownbrand"]:checked').val();
    var resell = $('input[name="resell"]:checked').val();
    var ImportBasis = $('input[name="importbasis"]:checked').val();
    var distributeEEE = $('input[name="distributeeee"]:checked').val();
    var exportEU = $('input[name="exporteu"]:checked').val();
    var distanceSelling = $('input[name="distanceselling"]:checked').val();

    if ( ownBrand && resell && ImportBasis && distributeEEE && exportEU && distanceSelling === 'Y' ) {
        $('.cautionMessage').show();
        console.log('Show');
    } else {
        $('.cautionMessage').hide();
        console.log('Hide');
    }
});
  • 0
    Кстати, причина в том, что ImportBasis сине-зеленоватый в приведенном выше коде, заключается в том, что по соглашению имена, начинающиеся с заглавной буквы, предназначены для функций конструктора ... вы должны изменить его на importBasis . Просто в сторону. ВТОРОЙ - вы проверяете только distanceSelling отношению к "Y" но ни один из остальных (?)! Если эти элементы DOM существуют вообще, первые 90% вашего оператора if всегда будут true а весь оператор зависит только от distanceSelling .
  • 0
    Вы абсолютно правы, спасибо за ваш комментарий. Я также заметил выделение в редакторе stackoverflow, но оно не изменилось в моем редакторе кода.
Теги:

2 ответа

0
Лучший ответ

Ах, я вижу, что происходит - возможно, просто нужен свежий взгляд на это.

То, что вы сейчас делаете, это проверка того, что только distanceSelling является да, тогда как вы должны проверять, что все значения отсутствуют, и запускать ваше шоу/скрыть на основе этого, поскольку вы хотите показать сообщение, если какое-либо из значений "да".

Попробуйте следующее:

$('.cautionMessage').hide();
$('.weeeDetailsChange input').change(function () {
    var ownBrand = $('input[name="ownbrand"]:checked').val();
    var resell = $('input[name="resell"]:checked').val();
    var ImportBasis = $('input[name="importbasis"]:checked').val();
    var distributeEEE = $('input[name="distributeeee"]:checked').val();
    var exportEU = $('input[name="exporteu"]:checked').val();
    var distanceSelling = $('input[name="distanceselling"]:checked').val();

    if (ownBrand == 'N' && resell == 'N' && ImportBasis == 'N' && distributeEEE == 'N' && exportEU == 'N' && distanceSelling == 'N' ) {
        // all values are 'N'
        $('.cautionMessage').show();
        console.log('Show');
    } else {
        // not all values are 'N'
        $('.cautionMessage').hide();
        console.log('Hide');
    }
});

Надеюсь, я правильно понял это. Надеюсь, это поможет!

  • 0
    Спасибо! Это почти правильно работает. Если никакие значения не были выбраны, и я выбираю любую радиокнопку на нет, появляется сообщение об ошибке. Код работает только как положено, когда все переключатели были проверены. Есть идеи?
  • 0
    отредактировал код - теперь должен работать как положено. теперь он проверяет, что все поля 'N', а не что все не 'Y' - дайте мне знать, если это работает!
Показать ещё 2 комментария
0

Несколько изменений, которые я сделал. Я использую свойство checked prop('checked') вместо val() потому что он фактически возвращает мне логическое значение, поэтому мне не нужно сравнивать его с y или что-то еще. Затем я переворачиваю шкуру и показываю, где предупреждение осторожно скрывается, когда все флажки проверяются. Нажмите здесь, чтобы увидеть пример

$('.caution').hide();
$(".weeeDetailsChange").change(function(){
var ownBrand =  $('input[name="ownbrand"]:checked').prop('checked')
var resell =$('input[name="resell"]:checked').prop('checked')
var ImportBasis = $('input[name="importbasis"]:checked').prop('checked')
var distributeEEE = $('input[name="distributeeee"]:checked').prop('checked')
var exportEU = $('input[name="exporteu"]:checked').prop('checked')
var distanceSelling = $('input[name="distanceselling"]:checked').prop('checked')

if ( ownBrand && resell && ImportBasis && distributeEEE && exportEU && distanceSelling) {
    $('.caution').hide();
    console.log('hide');
} else {
    $('.caution').show();
    console.log('show');
}
});
  • 0
    Это также работает, и я никогда раньше не использовал метод prop. Спасибо за этот альтернативный вариант.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню