Как убрать обновление страницы?

При клике на кнопку и когда у меня введен не верный email, то происходит обновление страницы, но этого не должно быть. Что тут не так?

jQuery( document ).ready(function() { 
  jQuery(".rcl-bttn").on("click", validate);
 
  // Validate email
  function validateEmail(email) {
    var re = /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/;
    return re.test(email);
  }
   
  // send form
  function sendForm() {
    jQuery(".error").text("Form sending").fadeIn();
  }
 
  // validate email and send form after success validation
  function validate() {
    var email = jQuery("#email-user").val();
    var $error = jQuery(".error");
    $error.text("");
 
    if (!validateEmail(email)) {
        //rcl_submit_form(this);return false;
        this.preventDefault();
        $error.text(email + " неправильная почта");
        return false;
    }
    rcl_submit_form(this);
  }
});

Ответы (1 шт):

Автор решения: rusgeli

preventDefault() - метод не элемента, а события (Подробнее). Вам необходимо получить в функции validate() переменную события, и уже у нее вызвать метод preventDefault(): function validate(e) { ... e.preventDefault(); ... }

jQuery( document ).ready(function() { 
  jQuery(".rcl-bttn").on("click", validate);
 
  // Validate email
  function validateEmail(email) {
    var re = /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/;
    return re.test(email);
  }
   
  // send form
  function sendForm() {
    jQuery(".error").text("Form sending").fadeIn();
  }
 
  // validate email and send form after success validation
  function validate(e) { // e - переменная события, получаем ее здесь
    var email = jQuery("#email-user").val();
    var $error = jQuery(".error");
    $error.text("");
 
    if (!validateEmail(email)) {
        //rcl_submit_form(this);return false;
        e.preventDefault(); // e - переменная события, у нее есть метод preventDefault. У элемента его нет
        $error.text(email + " неправильная почта");
        return false;
    }
    rcl_submit_form(this);
  }
});

Но лучше всего метод preventDefault вызывать в самом начале функции:

function validate(e) {
  e.preventDefault();
  
  ...
  
}
→ Ссылка