#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. О, я понимаю, о чем вы говорите. Итак, теперь я удалил форму возврата в методе инициализации. По сути, я пытаюсь создать модульную систему входа, чтобы, если мы внедрим другое место для входа, я мог просто заменить форму другой формой, и все остальное работало бы так же. Должен ли я использовать другой подход к этому?