Meteor事件触发了错误的方法

时间:2017-01-15 21:55:33

标签: javascript meteor

此Meteor客户端代码在按下CLEAR按钮时,浏览器控制台会打印Check entries,但只有在点击INFO按钮时才会触发,并且仅在{{1}时触发是空的。
我做错了什么以及如何解决? THX

plate
Template.body.events({
  'submit form': function (event) {
   event.preventDefault();
   footerInfo();
 }
});

Template.footer.events({
  'click #clear': () => {
    Session.set('busy', false);
    document.getElementById('plate').value = '';
    Session.set('plate', '');
    searching = '';
  },
  'click #info': () => {
    footerInfo();
  }
});

footerInfo = () => {
  let plate = document.getElementById('plate').value;
  if (!plate) {
    console.log('Check entries');  //<-- prints even when CLEAR is clicked.
    Session.set('busy', false);
    return;
  }
  Session.set('plate', plate);
  let doc = myCol.findOne({plate: Session.get('plate')});
};

1 个答案:

答案 0 :(得分:0)

一般情况下,您可能希望使用Meteor表单提交功能来处理此问题(cf https://www.meteor.com/tutorials/blaze/forms-and-events),但您的设置有点奇怪,因为按钮与表单位于不同的模板中。< / p>

在这里,我可能会保留整体结构,并在每个事件处理程序的顶部添加“event.preventDefault()”。

如果由于某些原因不起作用,还要添加“event.stopImmediatePropagation()”。

但我认为应该这样做:

Template.footer.events({
  'click #clear': (event) => {
    event.preventDefault();
    Session.set('busy', false);
    document.getElementById('plate').value = '';
    Session.set('plate', '');
    searching = '';
  },
  'click #info': (event) => {
    event.preventDefault();
    footerInfo();
  }
});