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.
}