什么是最简单的方法来响应使用'return false'取消的submit()操作

时间:2009-09-25 06:12:29

标签: javascript jquery

我有一些图像按钮,它们附加了jQuery事件处理程序。

我想在click()事件中进行AJAX调用,以确定是否应该实际允许该操作。因为我正在进行异步ajax调用,所以我必须返回'false'以立即取消该事件并等待响应。

$('[id^=btnShoppingCartStep_]').click(function() {

 var stepName = this.id.substring("btnShoppingCartStep_".length);

 $.ajax({
            type: "POST",
            url: $.url("isActionAllowed"),
            data: "requestedStep=" + stepName,
            dataType: "json",

            success: function(data) {

                if (data.allowed) {

                    // need to resume the action here
                }
                else {
                    AlertDialog(data.message, "Not allowed!");
                }

            }

        });

        return false;
    });

如果AJAX调用确定应该允许它,我需要找到恢复click事件的最佳方法。

任何这样做我能想到的方法看起来都很笨拙,例如:

1)从按钮

中删除事件处理程序

2)模拟点击的按钮

有什么好办法让我失踪吗?

4 个答案:

答案 0 :(得分:1)

确认请求的有效性需要多长时间?在此期间用户还会做些什么?

为什么不让服务器进行验证?那风险太大了吗?您可以简单地将数据传递给服务器,让它确定它是否有效。如果不是,它会告诉Ajax“不允许”,该功能会提醒用户。如果它喜欢这些数据,则无需恢复已完成的操作。

答案 1 :(得分:1)

如果您需要提交表单:

$('#form_id').submit();

如果您需要继续此功能:

var allowed_actions = {};

$('[id^=btnShoppingCartStep_]').click(function() {

var stepName = this.id.substring("btnShoppingCartStep_".length);
var $click_me_again = $(this);

if (!allowed_actions[stepName]) {
  $.ajax({
          type: "POST",
          url: $.url("isActionAllowed"),
          data: "requestedStep=" + stepName,
          dataType: "json",

          success: function(data) {

            if (data.allowed) {

                // need to resume the action here
                allowed_actions[stepName] = true;
                $click_me_again.click();
            }
            else {
                AlertDialog(data.message, "Not allowed!");
            }

          }

      });
      return false;
    } // end if
    // continue function (check passed)
});

答案 2 :(得分:0)

为表单指定ID。假设您将其命名为myForm。您// need to resume the action here的位置,请使用:

$("#myForm").trigger("submit");

答案 3 :(得分:0)

1)只需调用表单的submit()方法。

$("#FormID").submit();

2)此外,如果你想要截取表单的提交,你可能想要略有不同(例如,如果你可以通过> 1按钮提交表单):

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