如何定位旁加载的 HTML

How to target HTML that is side-loaded

我正在使用名为 Stripe 的支付网关,专门使用其 checkout cart 系统。

我已经设法让购物车正常工作,它会根据产品在我需要时创建客户、订单和付款。但是,我不是很 javascript 导向,但想集成一种自动将用户电子邮件插入结帐电子邮件字段的方法。我试过这个:

$(document).ready(function() {
    $('.stripe-button-el').click(function() {
        setTimeout(function() { 
            $('.Fieldset').closest('.Fieldset-input').attr('value', 'some@email.com');
            console.log('Value 1: ' + $('.Fieldset-input').attr('value'));
            console.log('Value 2: ' + $('.Fieldset').closest('.Fieldset-input') .attr('value'));
        }, 2000);
    });
});

但是,这两个值都未定义。我添加 setTimeout() 的原因是因为结帐是由按钮触发的,在单击该按钮之前 HTML 不会添加到站点,因此,我无法访问其属性。我知道这样做是为了安全,以防止您访问卡信息,但是有什么办法可以解决这个问题吗?

我将用户电子邮件存储在一个对象中,所以我只想说:

$(document).ready(function() {
    var user { 'email': <?= $email ?> };

    // put this email inside the checkout email property
    $('input[type=email]').attr('value', user.email);
}

感谢@yomisimie 在评论中提供此内容,有一种 'advanced' 方法可以添加包含 'email' 字段的按钮:

handler.open({
    email: 'some@email.com'
});

可以在 documentation.

中找到

似乎是在回传中添加元素,所以我认为您必须检查文档就绪块以查看该元素是否存在。像这样:

$(document).ready(function() {
  if ($('.Fieldset').find('.Fieldset-input').is(':visible')) {
    $('.Fieldset').find('.Fieldset-input').attr('value', 'some@email.com');
    console.log('Value 1: ' + $('.Fieldset-input').attr('value'));
    console.log('Value 2: ' + $('.Fieldset').find('.Fieldset-input').attr('value'));
  }
});

在我看来你必须使用 .find() 方法来获取 input