javascript 阻止Amazon支付按钮打开弹出窗口

flmtquvp  于 2023-02-18  发布在  Java
关注(0)|答案(2)|浏览(166)

我有下面的按钮(或链接),我投标到它的亚马逊支付事件。
<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的情况下,弹出窗口不会打开,但它仍然打开,我如何阻止它打开?

hgc7kmma

hgc7kmma1#

这是一个猜测,因为我从来没有使用过OffAmazonPayments.Button,但是:如果它还在按钮上定义了一个click处理程序,那么你所做的不会停止该处理程序的运行。要做到这一点,请确保你首先用jQuery**连接你的处理程序(在你为该链接调用OffAmazonPayments.Button之前),并在你的处理程序中使用e.stopImmediatePropagation()来停止调用该链接上的其他事件处理程序。
下面是一个例子-当前处理程序用于“停止”事件的代码不会阻止同一级别的其他处理程序运行:Live Copy

<!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();,第二个处理程序就不再运行了:Live Copy

<!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>

旁注:如果您从jQuery事件处理程序调用return false;,则调用e.preventDefault()是多余的。jQuery看到false返回值并为您调用e.stopPropagation()e.preventDefault()(但不调用e.stopImmediatePropagation())。

1dkrff03

1dkrff032#

我知道这是一个老问题,但由于我有同样的问题,并在这里遇到这个主题,我想这个答案可能会帮助别人在未来。
我同样需要做一些验证,并可能阻止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) {
        }
    });

相关问题