Пытаетесь передать событие jQuery в функцию шаблона модуля?

#javascript #jquery #module #callback #module-pattern

#javascript #jquery #модуль #обратный вызов #модуль-шаблон

Вопрос:

Я впервые пробую шаблон модуля для формы, в которой регистрируются пользователи. Я хочу передать событие отправки в функцию аутентификации пользователя, но по какой-то причине функция аутентификации пользователя не запускается, функция preventDefault (), которая у меня есть для тестирования, не запускается, и форма все равно отправляется… Может кто-нибудь сказать мне, что я делаю не так? Или укажите мне правильное направление? Заранее благодарю вас!

Вот мой первоначальный код и подход:

 var Login = (function(){
  var form;

  var init = function (formId) {
    form = formId;
    return form;
  }

  var authenticate = function(e) {
    console.log(e)
    e.preventDefault();
  }

  return {
    init: init,
    authenticate: authenticate
  }
})();

$(function(){
  var mainLogin = Login.init( $("form#login-form") );
  mainLogin.submit( mainLogin.authenticate )
});
  

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

 var Login = function(form){
  this.form = form;

  var authenticate = function(e) {
    console.log(e)
    e.preventDefault();
  }

  return {
    form: form,
    authenticate: authenticate
  }
};

$(function(){
  var mainLogin = new Login($("form#login-form"));
  mainLogin.form.submit( mainLogin.authenticate );
});
  

Это лучший подход?

Комментарии:

1. Но почему? Зачем иметь функцию, которая просто возвращает все, что вы передаете, и authenticate это не то же самое, что authenticate_user , это две разные вещи

2. Ах, извините, я случайно оставил там пользователя для аутентификации, я пытался заставить код работать! И да, я думал, что функция init может вернуть форму, чтобы я мог продолжить вызывать функции для нее?

3. Причина, по которой это не работает, заключается в том, что mainLogin это явно форма, завернутая в jQuery, а не объект, обладающий authenticate свойством

4. Но на самом деле вы только что написали $("#login-form").submit( function(e) { e.preventDefault() }) самым сложным из возможных способов.

5. О, я понимаю, о чем вы говорите. Итак, теперь я удалил форму возврата в методе инициализации. По сути, я пытаюсь создать модульную систему входа, чтобы, если мы внедрим другое место для входа, я мог просто заменить форму другой формой, и все остальное работало бы так же. Должен ли я использовать другой подход к этому?