繁体   English   中英

流星事件触发了错误的方法

[英]Meteor event fires the wrong method

按下按钮CLEAR时,此Meteor客户端代码会在浏览器控制台上显示Check entries但仅当单击INFO按钮且plate为null时才预期触发。
我做错了什么以及如何解决? 谢谢

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')});
};
<body>
  <div id="main">
    <div id="content">
      <form>
        <button type="submit" style="display:none"></button>
            {{> content}}
            {{> footer}}
      </form>
    </div>
  </div>
</body>

<template name="content">
    <input type="text" id="plate" autocomplete="off">
</template>

<template name="footer">
  <footer>
    <button id="clear">CLEAR</button>
    <button id="info">INFO</button>
  </footer>
</template>

通常,您可能希望使用Meteor表单提交功能来处理此问题( 参阅https://www.meteor.com/tutorials/blaze/forms-and-events ),但是您的设置有些奇怪,因为按钮是与表格所使用的模板不同。

在这里,我可能会保留整体结构,并在每个事件处理程序的顶部添加一个“ 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();
  }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM