jQuery单击事件延迟

时间:2015-08-14 09:39:19

标签: javascript jquery

我有一个按钮,触发(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>

3 个答案:

答案 0 :(得分:3)

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

执行此操作的最佳方法是仅在第一个函数完成时触发第二个函数。

编辑:我从未使用过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>

答案 1 :(得分:1)

setTimeout(function() {
    // Second click
}, seconds * 1000);

将第二次点击代码放入setTimeout关闭功能

答案 2 :(得分:0)

如果你想要的只是一个简单的延迟,我认为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