JavaScript если оператор игнорирует условие - PullRequest
0 голосов
/ 25 октября 2018

У меня есть код JavaScript для проверки моей контактной формы и выполнения сценария POST to PHP, проблема в том, что сценарий игнорирует оператор IF и выполняет публикацию, в то время как ответ от моей функции validateForm равен false.

Если validateForm () возвращает false, он все еще выполняет действие POST

Вот распечатка консоли с результатом функции

Result

Мой код JS:

    $(document).ready(function() {
    $("form[name='contactf']").submit(function(e) {             
        // do the extra stuff here      
        e.preventDefault();
        console.log(validateForm());
        if(validateForm()){                     
            $.ajax({                
                type: "POST",
                url: "mail.php",
                data: $(this).serialize(),            
                success: function(data) {                   
                    if(data.message == 'success'){                      
                        M.toast({html: 'Mensagem enviada com sucesso!'})
                        $('#first_name').val('');
                        $('#last_name').val('');
                        $('#subject').val('');
                        $('#email').val('');
                        $('#phone').val('');
                        $('#details').val('');
                    }else if(data.message == 'error'){
                        M.toast({html: 'Ops... Tente novamente dentro de alguns minutos.'})
                    }
                }
            })
        }
        else
            ;
    })
    function validateForm()
    {
        var name=document.forms["contactf"]["first_name"].value;
        var surname=document.forms["contactf"]["last_name"].value;
        var subject=document.forms["contactf"]["subject"].value;
        var mail=document.forms["contactf"]["email"].value;
        var phone=document.forms["contactf"]["phone"].value;
        var details=document.forms["contactf"]["details"].value;
        var isnum = /^\d+$/.test(phone);        
        if(!isnum){
            M.toast({html: 'O telefone deve conter apenas números!'});
            return false;
        }       
        else if (!name || !surname || !subject || !mail || !phone || !details)
        {
            M.toast({html: 'Preencha todos os campos!'})
            return false;
        }
        else
            return true;        
    }   
    function id( el ){
        return document.getElementById( el );
    }
})  

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Вам необходимо изменить условие else if.Напишите условие как:

else if (name==null || name=="" || surname==null || surname=="" || subject==null || subject=="" || mail==null || mail=="" || phone==null || phone=="" || details==null || details=="")

Не используйте Запятая (,) для разделения.

0 голосов
/ 25 октября 2018

Ваша логическая логика неверна.

Вместо этого вы можете использовать !value, который выдает true, если value - ноль или пустая строка,а затем ИЛИ все они используют ||.

Это основано на приведении типа к логическим значениям, подробнее об этом см., например, эта страница MDN

Пример:

function validateForm(v1, v2, v3) {
  var name = v1;
  var surname = v2;
  var subject = v3;

  if (!name || !surname || !subject)
    return false;
  else
    return true;
}

console.log(validateForm(null, null, null));
console.log(validateForm(null, "", "Test"));
console.log(validateForm("John", "Smith", "Test"));
...