Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对使用';取消的submit()操作作出反应的最简单方法是什么;返回false';_Javascript_Jquery - Fatal编程技术网

Javascript 对使用';取消的submit()操作作出反应的最简单方法是什么;返回false';

Javascript 对使用';取消的submit()操作作出反应的最简单方法是什么;返回false';,javascript,jquery,Javascript,Jquery,我有一些带有jQuery事件处理程序的图像按钮 我想在click()事件中进行一个AJAX调用,以确定是否应该允许该操作。因为我正在执行一个异步ajax调用,所以我必须返回'false'以立即取消事件并等待响应 $('[id^=btnShoppingCartStep_]').click(function() { var stepName = this.id.substring("btnShoppingCartStep_".length); $.ajax({ typ

我有一些带有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调用决定应该允许单击事件,我需要找到恢复单击事件的最佳方法

我能想出的任何方法都显得笨拙,例如:

1) 从按钮中删除事件处理程序

2) 模拟单击已单击的按钮


有什么好的方法可以做到这一点吗?我不知道?

给表单分配一个ID。假设您将其命名为
myForm
。如果您的
//需要恢复此处的操作,请使用以下命令:

$("#myForm").trigger("submit");
1) 只需调用表单的submit()方法

2) 此外,如果您希望截取针对该目的的表单提交,您可能希望执行稍微不同的操作(例如,如果您可以通过>1按钮提交表单):


确认请求的有效性需要多长时间?在这段时间内,用户还会做什么


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

如果需要提交表单:

$('#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)
});

为什么你不能在用户想要点击“提交”之前在后台检查呢?也可以考虑做阻塞请求。为什么不试试块用户界面?[?感谢您提供的额外信息。将有额外的服务器端验证-我只是不希望用户在尝试转到另一个可能不允许他们访问的页面时,丢失他们在当前页面上已经做出的任何选择。我现在没有时间完全用javascript复制服务器端逻辑。这更像是一种礼貌用户比我现在实现它的任何方式都重要。
$('#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)
});