У меня есть форма для изменения пользователем своих настроек.Он имеет 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?