簡體   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