PaymentResponse:payerdetailchange 事件
当用户在填写付款请求表单时更改其个人信息,Payment Request API 会向 PaymentResponse 对象触发一个 payerdetailchange 事件。这可能发生在支付方在检测到错误后重试提交其详细信息时。
payerdetailchange 的事件处理程序应检查表单中已更改的每个值,并确保这些值有效。如果任何值无效,应配置适当的错误消息,并在 PaymentResponse 对象上调用 retry() 方法,要求用户更新无效的条目。
此事件不可取消,也不会冒泡。
语法
在诸如 addEventListener() 之类的方法中使用事件名称,或设置事件处理程序属性。
js
addEventListener("payerdetailchange", (event) => { })
onpayerdetailchange = (event) => { }
事件类型
一个 PaymentRequestUpdateEvent。继承自 Event。
事件属性
虽然此事件类型是 PaymentRequestUpdateEvent,但它不实现任何 Event 对象上已有的属性。
示例
在下面的示例中,onpayerdetailchange 用于设置 payerdetailchange 事件的监听器,以便验证用户输入的信息,并要求更正任何错误。
js
// Options for PaymentRequest(), indicating that shipping address,
// payer email address, name, and phone number all be collected.
const options = {
requestShipping: true,
requestPayerEmail: true,
requestPayerName: true,
requestPayerPhone: true,
};
const request = new PaymentRequest(methods, details, options);
const response = request.show();
// Get the data from the response
let {
payerName: oldPayerName,
payerEmail: oldPayerEmail,
payerPhone: oldPayerPhone,
} = response;
// Set up a handler for payerdetailchange events, to
// request corrections as needed.
response.onpayerdetailchange = async (ev) => {
const promisesToValidate = [];
const { payerName, payerEmail, payerPhone } = response;
// Validate each value which changed by calling a function
// that validates each type of data, returning a promise which
// resolves if the data is valid.
if (oldPayerName !== payerName) {
promisesToValidate.push(validateName(payerName));
oldPayerName = payerName;
}
if (oldPayerEmail !== payerEmail) {
promisesToValidate.push(validateEmail(payerEmail));
oldPayerEmail = payerEmail;
}
if (oldPayerPhone !== payerPhone) {
promisesToValidate.push(validatePhone(payerPhone));
oldPayerPhone = payerPhone;
}
// As each validation promise resolves, add the results of the
// validation to the errors list
const errors = await Promise.all(promisesToValidate).then((results) =>
results.reduce((errors, result) => Object.assign(errors, result)),
);
// If we found any errors, wait for them to be corrected
if (Object.getOwnPropertyNames(errors).length) {
await response.retry(errors);
} else {
// We have a good payment; send the data to the server
await fetch("/pay-for-things/", { method: "POST", body: response.json() });
response.complete("success");
}
};
await response.retry({
payer: {
email: "invalid domain.",
phone: "invalid number.",
},
});
addEventListener 等效
您也可以使用 addEventListener() 方法来设置事件处理程序。
js
response.addEventListener("payerdetailchange", async (ev) => {
// …
});
规范
| 规范 |
|---|
| Payment Request API # dfn-payerdetailchange |
浏览器兼容性
加载中…