jQuery单击“事件延迟”

jQuery Click Event Delay

本文关键字:事件延迟 延迟 事件 单击 jQuery      更新时间:2023-09-26

我有一个按钮,它触发(1)优惠券代码的应用程序和(2)提交整个付款表单。

问题是优惠券代码需要几秒钟才能应用,所以在整个表单提交付款后才应用。我怎样才能延迟点击第二个付款按钮,以便先应用优惠券代码按钮?

<script type="text/javascript">
jQuery('.js-coll-button2').click(function(e) {
  e.preventDefault();
  jQuery('#sc_checkout_form_1').find('.sc-coup-apply-btn').click();
  jQuery('#sc_checkout_form_1').find('.sc-payment-btn').click();
});
</script>

那是不明智的。你不能保证一定的时间总是足够的。这取决于客户端的计算机和连接,如果第一个操作返回错误怎么办?

最好的方法是只在第一个函数完成时才触发第二个函数。

编辑:我从来没有使用过Javascript的Stripe,但是API手册清楚地说,每个REST调用返回一个代码。

并且,您不应该尝试强制单击,而应该使用函数代替。将你的功能与按钮分离!

<script type="text/javascript">
function doCoupon() {
     return $.ajax(... do your stripe call ...);
}
function doAnotherThing() {
    return $.ahax(... call your other thingie... );
}
function handleError() {
    // ... 
}
jQuery("#sc_checkout_form_1 .sc-coup-apply-btn").click(doCoupon);
jQuery("#sc_checkout_form_1 .sc-payment-btn").click(doAnotherThing);

jQuery('.js-coll-button2').click(function(e) {
  e.preventDefault();
    doCoupon().success(doAnotherThing).error(handleError);  
});
</script>
setTimeout(function() {
    // Second click
}, seconds * 1000);

将第二个点击代码放入setTimeout闭包函数

如果你想要的只是一个简单的延迟,我认为jQuery可以做到这一点:https://api.jquery.com/delay/

jQuery('#sc_checkout_form_1').find('.sc-payment-btn').delay(1000).click();

或者根据其他答案使用setTimeout

仅仅依赖于超时/等待并不是一个保证的解决方案,但是,看看这个答案:https://stackoverflow.com/a/32007018/15667