jQuery:在执行其他命令之前完成一个函数

时间:2017-06-15 12:28:45

标签: jquery html ajax

我有一个稍微复杂的jQuery代码,在导航选项卡时使用form.submit。我在每个标签上都有一个表单。 form.submit调用ajax请求并返回isValid(一个表明表单是否已经过验证的变量)。在此之后,如果输入的数据无效,我想停止从选项卡导航。

我的Jquery代码有点像这样:

$(document).on('hide.bs.tab', '.nav-pills a', function (e) {

    $('#form').submit(); //invokes the submit function
    return isValid; //form.submit alters the value for this
});

我的isValid是一个全局变量。

var isValid=true;

$('#form').on('submit', function (e) {
     //does an ajax request, and sets isValid to be true if form validation
     //at back end is successful. Otherwise it's false
}

然而,似乎jQuery正在执行form.submit函数之前的return语句。

如果我在$(文件).on('hide.bs.tab','。nav-pills a',函数(e)中警告isValid,即使表单无效,我也会得到true,而同时如果form.submit中有isValid的警告声明,它会正确地给我false / true。

我读过这与延迟有关,但我不知道如何使用它。非常感谢任何帮助。

潜在解决方案

所以经过一些研究后,我在ajax请求中将asyncrhonous的属性设置为false,并且它开始按预期工作,但这是正确的方法吗?

1 个答案:

答案 0 :(得分:1)

你能尝试这种方法吗?

$("#form").submit(function(event) {

      /* stop form from submitting normally */
      event.preventDefault();

      /* get the action attribute from the <form action=""> element */
      var $form = $( this ),
          url = $form.attr( 'action' );

      /* Send the data using post with element id name and name2*/
      var posting = $.post( url, { name: $('#name').val(), name2: $('#name2').val() } );

      /* Alerts the results */
      posting.done(function( data ) {
        alert('success');
      });
    });

希望有所帮助,