Запретить Amazon Pay Button открывать всплывающее окно

0

У меня есть следующая кнопка (или ссылка), которую я ожидаю от нее в 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 случае всплывающее окно не откроется, но все-таки, как я могу предотвратить его открытие?

Теги:
amazon-web-services
amazon

2 ответа

0

Я понимаю, что это старый вопрос, но поскольку у меня была такая же проблема и я столкнулся с этой темой, я полагаю, что этот ответ может помочь кому-то еще в будущем.

У меня была такая же необходимость сделать некоторую проверку и, возможно, предотвратить отправку и создание всплывающего окна кнопки 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) {
        }
    });
0

Это немного догадка, потому что я никогда не использовал 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>

Сторона примечания: если вы return false; из обработчика события jQuery, вызов e.preventDefault() является избыточным. jQuery видит false возвращаемое значение и вызывает e.stopPropagation() и e.preventDefault() для вас (но не e.stopImmediatePropagation()).

  • 0
    Я знаю, что ваш ответ правильный на 100%, но я поставил ставку до / после события jquery click, но все равно не повезло :(
  • 1
    @AliBassam: :-( Ну, это было немного догадки. Извините, что оказалось не то, что вам нужно. Я оставлю это немного, чтобы другие могли увидеть, что это не работает, затем удалите его Надеюсь, к тому времени вы найдете решение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню