我有下面的按钮(或链接),我投标到它的亚马逊支付事件。<a id="AmazonPayButton"></a>
招标内容如下:
var btn = OffAmazonPayments.Button("AmazonPayButton", "AmAzOnCoDeHerE", {
type: "PwA", color: "LightGray",
authorization: function () {
loginOptions = { scope: "profile payments:widget payments:shipping_address" };
taxes = "0";
authRequest = amazon.Login.authorize(loginOptions, "https://SomeIpHere.com/payment.aspx?taxes=" + taxes);
},
onError: function (error) {
}
});
现在,使用jQuery
,我定义了click事件来进行一些验证。
$("#AmazonPayButton").click(function(e){
if(..) {
//Allow
}
else {
e.preventDefault();
return false;
}
});
我预计在else
的情况下,弹出窗口不会打开,但它仍然打开,我如何阻止它打开?
2条答案
按热度按时间hgc7kmma1#
这是一个猜测,因为我从来没有使用过
OffAmazonPayments.Button
,但是:如果它还在按钮上定义了一个click
处理程序,那么你所做的不会停止该处理程序的运行。要做到这一点,请确保你首先用jQuery**连接你的处理程序(在你为该链接调用OffAmazonPayments.Button
之前),并在你的处理程序中使用e.stopImmediatePropagation()
来停止调用该链接上的其他事件处理程序。下面是一个例子-当前处理程序用于“停止”事件的代码不会阻止同一级别的其他处理程序运行:Live Copy
但是如果我们添加
e.stopImmediatePropagation();
,第二个处理程序就不再运行了:Live Copy旁注:如果您从jQuery事件处理程序调用
return false;
,则调用e.preventDefault()
是多余的。jQuery看到false
返回值并为您调用e.stopPropagation()
和e.preventDefault()
(但不调用e.stopImmediatePropagation()
)。1dkrff032#
我知道这是一个老问题,但由于我有同样的问题,并在这里遇到这个主题,我想这个答案可能会帮助别人在未来。
我同样需要做一些验证,并可能阻止Amazon Payment按钮提交和创建弹出窗口。解决方案实际上非常简单,因为事实证明。只需在构造按钮时将您的验证代码插入他们的授权函数。当然,在那里添加您自己的函数引用时,您需要处理范围,但我将这个练习留给您。
给定原始代码片段,下面是一个示例: