[英]Prevent Amazon Pay Button from Opening a Popup Window
我有以下要向其出價的按鈕(或鏈接),即Amazon Payment Event。
<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
情況下,彈出窗口不會打開,但仍然可以打開,如何防止它打開?
這有點猜測,因為我從未使用過OffAmazonPayments.Button
,但是:如果它還在按鈕上定義了一個click
處理程序,那么您所做的將不會阻止該處理程序運行。 要做到這一點,請確保您掛接與jQuery處理程序第一個 (在打電話前OffAmazonPayments.Button
該鏈接),並在你的處理器使用e.stopImmediatePropagation()
以阻止其他事件處理程序的鏈接被調用。
這是一個示例—您當前用於“停止”該事件的處理程序的代碼不會阻止運行相同級別的其他處理程序: 實時復制
<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<meta charset=utf-8 />
<title>stopImmediatePropagation Example</title>
</head>
<body>
<div id="foo">click me</div>
<script>
(function() {
$("#foo").click(function(e) {
display("one");
e.preventDefault();
return false;
})
$("#foo").click(function() {
display("two");
})
function display(msg) {
$("<p>").html(String(msg)).appendTo(document.body);
}
})();
</script>
</body>
</html>
但是,如果我們添加e.stopImmediatePropagation();
,第二個處理程序不再運行: 實時復制
<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<meta charset=utf-8 />
<title>stopImmediatePropagation Example</title>
</head>
<body>
<div id="foo">click me</div>
<script>
(function() {
$("#foo").click(function(e) {
display("one");
e.preventDefault();
e.stopImmediatePropagation();
return false;
})
$("#foo").click(function() {
display("two");
})
function display(msg) {
$("<p>").html(String(msg)).appendTo(document.body);
}
})();
</script>
</body>
</html>
注意:如果return false;
從jQuery事件處理程序中,調用e.preventDefault()
是多余的。 jQuery看到false
返回值,並為您調用e.stopPropagation()
和e.preventDefault()
(但沒有e.stopImmediatePropagation()
)。
我意識到這是一個古老的問題,但是由於我遇到了同樣的問題,並且在這里遇到了這個話題,我認為這個答案將來可能會對其他人有所幫助。
我同樣需要做一些驗證,並有可能阻止Amazon Payment按鈕提交和創建彈出窗口。 事實證明,該解決方案實際上非常簡單。 構造按鈕時,只需將驗證代碼插入其授權功能即可。 在其中添加自己的函數引用時,您當然需要處理范圍,但是我將其留給您。
給定原始代碼段,下面是一個示例:
var btn = OffAmazonPayments.Button("AmazonPayButton", "AmAzOnCoDeHerE", {
type: "PwA", color: "LightGray",
authorization: function () {
//// validation code added here
if (!validationCheckPasses()) { // your validation would go here
return; // don't allow button to submit if validation failed
}
////
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) {
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.