Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.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 允许jquery。一种在Ajax调用后再次单击的方法_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 允许jquery。一种在Ajax调用后再次单击的方法

Javascript 允许jquery。一种在Ajax调用后再次单击的方法,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有一个点击触发付款。我正在使用.One方法来禁止进一步的点击,但如果付款被拒绝,我想重新启用点击进行另一次尝试-当然,再次尝试。如果再次下降,让这种情况再次发生 $(".pay").one("click", function(event){ ...//payment code executes }); 阿贾克斯 一种方法是在ajaxsuccess中再次定义事件 $.ajax({ ... success: function(data){

我有一个点击触发付款。我正在使用.One方法来禁止进一步的点击,但如果付款被拒绝,我想重新启用点击进行另一次尝试-当然,再次尝试。如果再次下降,让这种情况再次发生

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

        ...//payment code executes

      });
阿贾克斯


一种方法是在ajaxsuccess中再次定义事件

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

一种方法是在ajaxsuccess中再次定义事件

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

JQuery的较新版本
$.ajax()
返回承诺,允许您在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) { 
    });
  });

JQuery的较新版本
$.ajax()
返回承诺,允许您在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) { 
    });
  });

我想说,最好的办法是:

  • 添加一个类
  • 检查类是否存在,然后不执行
  • 启动AJAX调用
  • 删除该类
这就是禁用的工作原理

这最好使用:

.addClass();
.removeClass();
而不是一次又一次地编写整个函数,复制代码


更新:如果DOM操作更难或成本更高,最好使用
$.data(元素、键、值)将上下文敏感值存储为键值对
感谢和他们的评论<代码>:D


示例

根据请求添加


我想说,最好的办法是:

  • 添加一个类
  • 检查类是否存在,然后不执行
  • 启动AJAX调用
  • 删除该类
这就是禁用的工作原理

这最好使用:

.addClass();
.removeClass();
而不是一次又一次地编写整个函数,复制代码


更新:如果DOM操作更难或成本更高,最好使用
$.data(元素、键、值)将上下文敏感值存储为键值对
感谢和他们的评论<代码>:D


示例

根据请求添加


显式委托函数,而不是使用闭包

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

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

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

显式委托函数,而不是使用闭包

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

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

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

//假设您的按钮如下所示:

<!--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");   
  });

现在付款
美元(“.pay”)。点击“点击”,功能(e){
$(“.pay button”).hide();//隐藏这两个按钮
$(“.wait”).show();//显示虚拟按钮
返回false;
});
//Ajax请求:
var jqxhr=$.ajax(“example.php”)
.done(函数(){
允许单击=错误;
})
.fail(函数(){
$(“.pay button”).hide();//隐藏这两个按钮
$(“.pay”).show();//显示虚拟按钮
控制台日志(“错误”);
});

我希望这对您有用。

//假设您的按钮如下:

<!--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");   
  });

现在付款
美元(“.pay”)。点击“点击”,功能(e){
$(“.pay button”).hide();//隐藏这两个按钮
$(“.wait”).show();//显示虚拟按钮
返回false;
});
//Ajax请求:
var jqxhr=$.ajax(“example.php”)
.done(函数(){
允许单击=错误;
})
.fail(函数(){
$(“.pay button”).hide();//隐藏这两个按钮
$(“.pay”).show();//显示虚拟按钮
控制台日志(“错误”);
});

我希望这对你有用。

它说
jquery.one('click'…)
将与
jquery.on('click',函数(e){…$(this.off(e)}
,这可能给你一个起点,它说
jquery.one('click'…)
将与
jquery.on('click',函数(e){…$(this.off e)}
,这可能会为您提供一个起点。如果ajax调用失败并调用
error
方法,则不允许重试。如果ajax调用失败并调用
error
方法,则不允许重试。如果变量可以更可靠地执行相同的操作而不必访问DOM,为什么要使用类?仅供参考:jQuery具有
$。data
否,它从data属性(如果存在)获取初始值,但它从不设置它。当添加和删除类时,触发DOM会重新绘制。没有全局变量,可以轻松实现上下文,但关于多个按钮的推测已经超出了原始问题的范围。Praveen,您介意给出一个si吗示例?这似乎是正确的答案,但我没有得到逻辑。当变量可以更可靠地执行相同的操作而无需访问DOM时,为什么要使用类?仅供参考:jQuery有
$。data
否,它从数据属性(如果存在)获取初始值,但从不设置它。当添加d删除类。上下文可以很容易地在没有全局变量的情况下实现,但是关于多个按钮的推测已经超出了原始问题的范围。Praveen,你介意给出一个简单的例子吗?这似乎是正确的答案,但我不明白其中的逻辑。