IF / ELSE на Javascript работает странно - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть форма, в которой я запрашиваю электронное письмо, которое я проверяю в регулярном выражении, если оно правильное, я отправляю сообщение, если нет, отправляю уведомление.

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

$('#sinCopago').on('click', function(event){
    if($('#nombreContratante').val() != "" && $('#motivo').val() != ""){
        if($('#fechaNac').val() > hoy){
            alert("Ingresa una fecha de nacimiento válida.");
        }else{
            if(validarMail($("#correo")) == true){
                event.preventDefault();
                $('#progressBarSisnova').modal({show:true});
                $('#payment-form-Sisnova').submit();
            }
            else{
                alert("Ingresa un correo válido");
            }
        }
    }
    else{
        alert("Por favor llene todos los campos");
    }
});

function validarMail(email){
    var caract = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/;

    if(caract.test(email) == false){
        return false;
    }
    else{
        return true;
    }
}

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Вы должны передать значение поля для функции validarMail(), поэтому замените текущий код

if(validarMail($("#correo")) == true)

на

 if(validarMail($("#correo").val()) == true)

и вы можете улучшить свою функцию.

function validarMail(email){
    var caract = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/;
    return caract.test(email)    
}
0 голосов
/ 30 ноября 2018

В настоящее время вы передаете объект $("#correo") jQuery validarMail:

if(validarMail($("#correo")) == true){

и приступаете к проверке этого объекта :

if(caract.test(email) == false){

Конечно, это не сработает, потому что вы не тестируете строку.Попробуйте вместо этого передать .val() из #correo.так что возможный .test( вызывается со строкой значения , а не объектом jQuery:

if(validarMail($("#correo").val()) == true){

Не стесняйтесь удалять часть == true, validarMail уже возвращаетboolean:

if(validarMail($("#correo").val())){

Вы также должны preventDefault , когда тест не пройден , а не когда тест пройден успешно - таким образом, форма будет отправлена ​​как обычно без прерывания только тогда, когда тестпреуспевает.Код также, вероятно, будет более лёгким и легким для чтения, если вы return обнаружите ошибку:

$('#sinCopago').on('click', function(event){
  if($('#nombreContratante').val() === "" || $('#motivo').val() === "") {
    event.preventDefault();
    return alert("Por favor llene todos los campos");
  }
  if($('#fechaNac').val() <= hoy){
    event.preventDefault();
    return alert("Ingresa una fecha de nacimiento válida.");
  }
  if(!validarMail($("#correo").val())){
    event.preventDefault();
    return alert("Ingresa un correo válido");
  }
  $('#progressBarSisnova').modal({show:true});
  $('#payment-form-Sisnova').submit();
});

Если при нажатии #sinCopago форма будет отправлена ​​без preventDefault, то в окончательной версии нет необходимости.линия там $('#payment-form-Sisnova').submit();.(В противном случае может вообще не потребоваться preventDefault, если действие по умолчанию для события не вызывает отправку формы или другое нежелательное поведение)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...