簡體   English   中英

阻止Amazon Pay按鈕打開彈出窗口

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM