基于回调的Javascript条件preventDefault

时间:2013-01-12 10:21:16

标签: javascript callback preventdefault

我正在尝试在提交按钮上使用javascript。点击提交按钮后,我运行一个例程,用回调处理程序h进行远程回调。根据h的结果,我将决定是否继续提交或阻止默认并留在页面上。

我尝试了几种方法。第一个是在回调后使用jquery运行提交:

$('#submit').on('click', function(e) {
  e.preventDefault();
  run_func_with_callback(h);
}

h() {
  if (success) {
    $('#submit').submit();
  }
}

另一个尝试无限循环,直到回调更改标志:

callback_flag = 0;

$('#submit').on('click', function(e) {
  run_func_with_callback(h);
  while(callback_flag == 0) {
    setTimeout(function() {}, 1000); // I want some form of sleep function here
  }

  if (callback_flag == -1) {
    e.preventDefault();
  }
}

h() {
  if (success) {
    callback_flag = 1;
  } else {
    callback_flag = -1;
  }
}

然而,这些解决方案都不起作用。第一个我猜jQuery实际上并没有这样做。第二个我所做的方法不是睡眠功能,并且不按照我需要的方式行事。

欢迎任何见解。谢谢!

2 个答案:

答案 0 :(得分:2)

坚持你的第一种方法,就像这样的工作:

$('#submit').on('click', function(e) {
    if(!success) {
        e.preventDefault();
        run_func_with_callback(h);
    }
    else {
        success = false;
    }
}

h() {
    if (success) {
        $('#submit').click();
    }
}

重要的是在回调中触发click事件,然后使用success的值有条件地执行提交。

答案 1 :(得分:0)

你能试试吗?

$('#submit').on('click', function(e) {
  e.preventDefault();
  run_func_with_callback(h);
}

h() {
  if (success) {
    $('#submit').closest("form").submit();
  }
}