允许jQuery .An方法在Ajax调用后再次单击

时间:2016-11-21 01:20:34

标签: javascript jquery ajax

点按即可触发付款。我正在使用.One方法禁止进一步点击,但如果付款恢复,我想重新启用点击进行另一次尝试 - 当然再次一次。如果再次出现下降,就会再次发生这种情况。

    $(".pay").one("click", function(event){ 

        ...//payment code executes

      });

的Ajax

$.ajax({
   ...
    success: function(data){
        $('.pay').html(data); //comes back declined. Re-enable .one click again.
    }

5 个答案:

答案 0 :(得分:2)

我想说,最好的方法是:

  • 添加课程。
  • 检查班级是否存在,然后不执行。
  • 解雇AJAX电话。
  • 删除课程。

这就是禁用的方式。

最好使用:

.addClass();
.removeClass();

一遍又一遍地编写整个函数,复制代码。

更新:如果DOM操作更难或更昂贵,最好使用$.data(element, key, value);方法将上下文敏感值存储为键值对,并设置执行标志。

感谢Soviutadeneo的评论。 :D

示例

根据请求添加...

$(".pay").on("click", function (event) {
  if ($(this).hasClass("stop"))
    return false;
  $(this).addClass("stop");
  // Other codes to follow.
});

$.ajax({
  //...
  success: function (data) {
    $('.pay').html(data)           //comes back declined. Re-enable .one click again.
             .removeClass("stop"); // remove the class that disables.
  }
});

答案 1 :(得分:1)

一种方法是在ajax成功中再次定义事件

SKSpriteNode *OneDrawing = [ObjectList objectAtIndex:(int)[ObjectList count]-1];
[OneDrawing removeFromParent];
[ObjectList removeObjectAtIndex:(int)[ObjectList count]-1];

答案 2 :(得分:1)

显式委派函数而不是使用闭包。

var triggerPayment = function (evt) {
    ... //payment code executes
}

$(".pay").one("click", triggerPayment);

$.ajax({
   ...
    success: function(data){
        if (isDeclined(data)) {
            $(".pay").one("click", triggerPayment);
        }
    }
});

答案 3 :(得分:0)

较新版本的JQuery $.ajax()会返回promises,如果ajax调用成功或失败,您可以轻松执行最后一步。

var jqxhr = $.ajax("example.php")
  .done(function() {
    console.log("success");
  })
  .fail(function() {
    console.log("error");
  })
  .always(function() {
    console.log("complete");

    // re-apply click event
    $(".pay").one("click", function(event) { 
    });
  });

答案 4 :(得分:0)

//假设你有这样的按钮:

<!--Button 1-->
<button type='submit' class='pay pay-button'>Pay Now</button>

//创建一个类似的按钮,例如..

<!--Button 2-->
<button type='button' class='wait pay-button' style='display: none'>Pay Now</button>

$(".pay").on("click", function(e) {
    $(".pay-button").hide(); //Hides the two buttons
    $(".wait").show(); //Shows the dummy button

    return false;
});


//The Ajax request:
var jqxhr = $.ajax("example.php")
  .done(function() {
    allow_click = false;
  })
  .fail(function() {
      $(".pay-button").hide(); //Hides the two buttons
    $(".pay").show(); //Shows the dummy button
    console.log("error");   
  });

我希望这适合你。