Отправка формы MeteorJS обновляет страницу с включенной функцией event.preventDefault()

#forms #meteor #refresh #user-registration

#формы #метеор #освежить #регистрация пользователя

Вопрос:

Приложение для знакомств построено с помощью MeteorJS, и страница обновляется всякий раз, когда я пытаюсь отправить эту форму для регистрации пользователя. Кроме того, Meteor.user().services.twitter.profile_image_url, похоже, не получает изображение в Twitter. Пожалуйста, помогите

imports/ui/components/partials/register-user.html

 lt;template name="registerUser"gt;  lt;div class="user-card"gt;  lt;form id="user-form"gt;  lt;div class="row"gt;  lt;label for="gender"gt;genderlt;/labelgt;  lt;select id="gender"gt;  lt;option value="cis man"gt;cis manlt;/optiongt;  lt;option value="cis woman"gt;cis womanlt;/optiongt;  lt;option value="non binary" selectedgt;non binarylt;/optiongt;  lt;option value="trans man"gt;trans manlt;/optiongt;  lt;option value="trans woman"gt;trans womanlt;/optiongt;   lt;/selectgt;  lt;/divgt;  lt;div class="row"gt;  lt;label for="prefer"gt;seekinglt;/labelgt;  lt;select id="prefer"gt;  lt;option value="cis men"gt;cis menlt;/optiongt;  lt;option value="cis women"gt;cis womenlt;/optiongt;  lt;option value="everyone" selectedgt;everyonelt;/optiongt;  lt;option value="non binary"gt;non binarylt;/optiongt;  lt;option value="trans women"gt;trans womenlt;/optiongt;  lt;option value="trans men"gt;trans menlt;/optiongt;  lt;/selectgt;  lt;/divgt;  lt;div class="row"gt;  lt;button class="button-primary register-user" type="submit" form="user-form"gt;registerlt;/buttongt;  lt;/divgt;  lt;/formgt; lt;/divgt; lt;/templategt;  

imports/ui/components/partials/register-user.js

 import { Meteor } from 'meteor/meteor'; import { Session } from 'meteor/session'; import './register-user.html';  Template.registerUser.onCreated(function () {  this.register_name = Meteor.user().profile.name;  this.register_img = Meteor.user().services.twitter.profile_image_url; });  Template.registerUser.events({   'submit .register-user' (event) {  event.preventDefault();  var gender = event.target.gender.value;  var prefer = event.target.prefer.value;  if (confirm("by continuing you verify you are a minimum of 21 years old")) {  Meteor.call('register.user', this.register_name, "", gender, prefer, (error) =gt; {  if (error) {   Flash.danger(error.error, 3000);   } else {   Session.set({'complete': true});  }  });  }  },  });  

imports/api/methods.js

 ...  'register.user': function(name, img, gender, prefer) {  RegisteredUsers.insert({ _id: this.userId, complete: true, role: false });  Profiles.insert({  _id: this.userId, name: name, img: img, gender: gender, prefer: prefer, address: "", right: [], matches: [],  });  // redisCollection.hset(this.userId, { "name": name, "img": img, "gender": gender });  }, ...  

Ответ №1:

В вашем примере показана ошибка при сопоставлении событий:

 'submit .register-user' (event) {  

Вы использовали сопоставление классов кнопки, но событие отправки происходит из формы. Затем измените его на:

 'submit #user-form' (event) {  

Ответ №2:

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

Это было бы что-то вроде этого:

 'submit #user-form'(event) {  event.preventDefault();  ... }