JQuery 功能延迟(按钮加载状态)

Delay in JQuery Function (Button Load State)

我将表单验证设置为使用 Ajax 请求创建一些 Google 文档,然后提交表单以在数据库中创建一个条目,一旦表单中的所有内容都经过验证.

验证 后要采取的操作由 submitHandler:

指定
submitHandler: function(form) {
    $('#submitButton').button('loading');
    success1.show();
    error1.hide();
    var eName = $('#create_event').find('input[name="eventName"]').val();
    var eDate = $('#create_event').find('input[name="eventDate"]').val();
    var eType = $('#create_event').find('input[name="eventType"]').val();

    function getAgenda(eName, eDate, eType) {
        var result = null;
        var separator = "&";
        var scriptUrl = "http://example.net/libraries/upload.php?fType=agnd" + separator + "eName=" + eName + separator + "eDate=" + eDate + separator + "eType=" + eType;
        $.ajax({
            url: scriptUrl,
            type: 'get',
            dataType: 'html',
            async: false,
            success: function(data) {
                result = data;
            }
        });
        return result;
    }

    function getMin(eName, eDate, eType) {
        var result = null;
        var separator = "&";
        var scriptUrl = "http://example.net/libraries/upload.php?fType=min" + separator + "eName=" + eName + separator + "eDate=" + eDate + separator + "eType=" + eType;
        $.ajax({
            url: scriptUrl,
            type: 'get',
            dataType: 'html',
            async: false,
            success: function(data) {
                result = data;
            }
        });
        return result;
    }
    var agenda = $("<input>").attr("type", "hidden").attr("name", "agendaURL").val(getAgenda(eName, eDate, eType));
    $('#create_event').append($(agenda));
    var min = $("<input>").attr("type", "hidden").attr("name", "minURL").val(getMin(eName, eDate, eType));
    $('#create_event').append($(min));
    form[0].submit();
}

直到表单提交之前,提交按钮才会进入 "loading" 状态。如果我删除 Ajax 请求,则加载状态会在单击时发生,而对于 Ajax 请求,它会非常延迟。

我在第二行将按钮设置为加载状态。

我的意思的一个例子可以在这里找到:http://getbootstrap.com/javascript/#buttons-stateful

如有任何帮助,我们将不胜感激,感谢您提前抽出时间。

这是我的解决方法:

        submitHandler: function(form) {
          $('#submitButton').button('loading');
          console.log('Loading Button');
          $("#cancelButton").prop("disabled", true);
          console.log('Disable Button');
          success1.show();
          error1.hide();
          var eName = $('#create_event').find('input[name="eventName"]').val();
          var eDate = $('#create_event').find('input[name="eventDate"]').val();
          var eType = $('#create_event').find('select[name="eventType"]').val();
          var separator = "&";
          var agendaURL = "http://example.net/libraries/upload.php?fType=agnd" + separator + "eName=" + eName + separator + "eDate=" + eDate + separator + "eType=" + eType;
          var minURL = "http://example.net/libraries/upload.php?fType=min" + separator + "eName=" + eName + separator + "eDate=" + eDate + separator + "eType=" + eType;
          var agendaReturn = getAgenda(agendaURL);
          console.log('Called getAgenda');
          agendaReturn.success(function(data) {
            $('input[name="agendaURL"]').val(data);
            console.log('Assigned agendaURL hidden');
          });
          var minReturn = getMin(minURL);
          console.log('Called getMin');
          minReturn.success(function(data) {
            $('input[name="minURL"]').val(data);
            console.log('Assigned minURL hidden');
            submitForm();
            console.log('Form submit called');
          });

          function submitForm() {
            console.log('Form submitting');
            $('#create_event').unbind().submit();
          }

          function getAgenda(agendaURL) {
            return $.ajax({
              url: agendaURL,
              type: 'get',
              dataType: 'text',
              async: true,
            });
          }

          function getMin(minURL) {
            return $.ajax({
              url: minURL,
              type: 'get',
              dataType: 'text',
              async: true,
            });
          }
        }

你试过了吗

  async:true;

我觉得应该可以。