Попытка визуализировать полусложную форму отправки - PullRequest
0 голосов
/ 11 марта 2011

У меня есть форма для изменения пользователем своих настроек.Он имеет 5 полей - имя, фамилия, пароль, подтверждающий пароль и адрес электронной почты.

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

Возможности, вне моей головы, таковы:

  • Текст во всех полях, пароли совпадают, адрес электронной почты действителен-> отправить
  • текст только по имени -> отправить
  • текст только по фамилии -> отправить
  • текст по обоим именам -> отправить
  • Текст только по электронной почте -> отправить
  • Текст только по электронной почте и имя -> отправить
  • Текст только по электронной почте и фамилия -> отправить
  • Текст в электронной почте недействителен-> показать недействительную ошибку, не отправлять
  • Текст в полях пароля не совпадает -> показывать другую недопустимую ошибку, не отправлять

Я использую jQuery для обработки всехэтого.Вот мой код:

$('#success').hide();
    $('#pwerror').hide();

    $('#subSet').live('click',function() {
        //if any of the fields have a value
        if($("#chfn").val() != "" || $("#chln").val() != "" || $("#chpw").val() != "" || $("#chpw2").val() != "" || $("#chem").val() != "")
        {
            //if the email field isn't empty (i.e. something is typed in), then check for email validation and post if valid
            if($("#chem").val() != "")
            {
                $("#profSet").validate({
                    rules: {
                        chem: {
                            email: true
                        }
                    }
                });
                if($("#profSet").valid())
                {
                    $.post('php/profSet.php', $('#profSet').serialize(), function(){
                        $('#profSet').hide();
                        $('#success').show();
                    });
                }
            }
            //checks if either of the password fields are filled
            if($("#chpw").val() != "" || $("#chpw2").val() != "")
            {
                //now checks if they are equal
                if($("#chpw").val() == $("#chpw2").val())
                {
                    $.post('php/profSet.php', $('#profSet').serialize(), function(){
                        $('#profSet').hide();
                        $('#success').show();
                    });
                }
                //if they aren't equal (which means if they are mismatching string, or if either one is blank), show error
                else
                {
                    $('#pwerror').show();
                }
            }
            //if it's not an email or password field, then just post, there are no conditionals for the first/last names
            if($("").val())
            {
                $.post('php/profSet.php', $('#profSet').serialize(), function(){
                    $('#profSet').hide();
                    $('#success').show();
                });
            }   
        }
    });

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

Есть ли способ заставить эту форму работать без выписывания девяти различных операторов if?

Ответы [ 2 ]

1 голос
/ 11 марта 2011

Логика там кажется довольно сложной, поэтому я не думаю, что есть способ избежать вложенных операторов if. Возможно, вы захотите использовать флаговые переменные, которые могут облегчить чтение и диагностику логических проблем ...

Так, например: var isEmail = false;

if ($ ("# chem"). Val ()! = "") {IsEmail = true; }

Возможно, это могло бы облегчить. Надеюсь, это поможет.

0 голосов
/ 11 марта 2011

Просто чтобы уточнить, вы хотите, чтобы ваша форма была действительна до тех пор, пока:

  1. Адрес электронной почты, если он указан, действителен
  2. Пароль, если он указан,должен совпадать с подтверждением пароля

Это правильно?Если так, то почему бы просто не сделать что-то вроде этого:

if (!isEmailValid()) // <-- You need to define how this function works
    // Show error message and stop form submission

if ($("#password").val() != $("#password_confirm").val())
    // Show error message and stop form validation

// No issue with e-mail or password/password confirmation! Let the form submission go through!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...