Javascript 观察者观察两个独立的事件,第二个事件被AJAX延迟

Javascript 观察者观察两个独立的事件,第二个事件被AJAX延迟,javascript,jquery,observer-pattern,Javascript,Jquery,Observer Pattern,我有一个数据输入屏幕,用户可以在其中键入值并使用+键前进到下一个字段。在最后一个字段中,用户可以按+或输入 +键表示继续在批中输入值;而enter键意味着结束对批次的添加,如果数据库中的金额总和等于批次金额,则立即进入下一页 简化HTML: 在本例中,您可以看到我正在“链接”事件;我认为这是个坏主意。例如,addRecord(),在成功时运行areAmountsEqual(),在成功时运行TurnButtongGreen()。。。它停在哪里 让观察者观察记录的变化,或者数量相等,似乎会好得多——

我有一个数据输入屏幕,用户可以在其中键入值并使用
+
键前进到下一个字段。在最后一个字段中,用户可以按
+
输入

+
键表示继续在批中输入值;而
enter
键意味着结束对批次的添加,如果数据库中的金额总和等于批次金额,则立即进入下一页

简化HTML:

在本例中,您可以看到我正在“链接”事件;我认为这是个坏主意。例如,
addRecord()
,在成功时运行
areAmountsEqual()
,在成功时运行
TurnButtongGreen()
。。。它停在哪里

让观察者观察记录的变化,或者数量相等,似乎会好得多——但我不知道如何在javascript中做到这一点

考虑到这一点,我的问题是:如何让观察者观察两个独立事件的真实性:

  • amount
    字段中按下
    enter
    键,然后
  • 数据库中的金额等于批处理的金额
  • 如果我能理解这一点,那么其他观察家应该是儿童游戏

    <div><input id="account"></div>
    <div><input id="type"></div>
    <div><input id="amount"></div>
    <div><button class="disabled" disabled>Next Page</button>
    
    $(document).ready(function(){
    
      // pressing '+' in account field advances cursor to type field
      $('#account').on('keypress',function (e) {
        // '+' key
        if(e.which==43) { 
    
          // prevent '+' from being entered into input
          e.preventDefault();
    
          $('#type').focus();
        }
      });
    
      // same thing for type field
      $('#type').on('keypress',function (e) {
        if(e.which==43) { 
          e.preventDefault();
          $('#amount').focus();
        }
      });
    
      // last field can accept '+' or 'enter'
      $('#amount').on('keypress',function(e) {
        if(e.which==43 || e.which==13) {
          e.preventDefault();
    
          addRecord();
    
          $('#account').focus();
    
          // This fails because this is executed before addRecord() finishes...
    
          // if total of amounts added to db == batchTotal
          if(which==13 && buttonIsGreen()) {
            // redirect to next page
          }
        }
      });
    });
    
    function addRecord() {
      // perform AJAX 
      var response = $.post( .. parameters .. );
      response.done(function(result) {
        if(result.status=='success') {
          // redraw some tables
          areAmountsEqual();
        }
      }); 
    }
    
    function areAmountsEqual() {
      // perform AJAX
      // on success, turn "next page" button to green
      turnButtonGreen();
      // return true or false...
    }
    
    function turnButtonGreen() {
      // set "next page" button class to make it green and enable it
    }
    
    function buttonIsGreen() {
      // return true if button is green.
    }