0

我在 Webflow 中创建了一个包含两个页面的多步骤表单:

第 1 步:/get-started 第 2 步:/get-started-final

为了开始,我在标签之前添加了以下代码

<script>
Webflow.push(function() {
  $('form').submit(function() {
    setTimeout(function() {
      location.href = 'https://websitedomain.com/get-started-final?email=' + $('#emailget').val();
    }, 100);
  });
});
</script>

此页面是表单输入的第一页,只要求输入姓名和电子邮件。

现在对于Get Started Final,我要求提供 4 个附加字段,但我还想从 URL 中提取电子邮件并将其添加到 Get Started Final 中的隐藏表单字段中。

<script>
function getParameterByName(url) {
    if(!url) url = window.location.href;
    var matches = url.match(/[\?|\&]?email=(.+)/)
    if (!matches[1]) return '';
    return decodeURIComponent(matches[1]);
}
Webflow.push(function() {
  $('#emailget').val(getParameterByName('email'));
});
</script>

我在“Get-Started-Final”中有一个非隐藏的电子邮件输入来测试代码是否有效,但它没有用电子邮件填充输入。

电子邮件输入的 ID 为 emailget。在我确认它确实抓取了电子邮件后,我会将其切换为隐藏。

我的代码有什么问题?

4

1 回答 1

0

这里的问题是您url在函数中对参数应用正则表达式匹配getParameterByName,而不是实际的 URL 本身,并且会出现错误,if (!matches[1])因为没有匹配项:

function getParameterByName(url) {
    if(!url) url = window.location.href;
    var matches = url.match(/[\?|\&]?email=(.+)/)
    if (!matches[1]) return '';
    return decodeURIComponent(matches[1]);
}

我猜你只是想在 URL 中获取一个特定的参数,所以你的函数可以像这样简单:

const getParameterByKey = key => new URLSearchParams(location.search).get(key);

完整代码:

<script>
const getUrlParameterFor = key => new URLSearchParams(location.search).get(key);
Webflow.push(function() {
  $('#emailget').val(getUrlParameterFor('email'));
});
</script>
于 2020-07-31T15:17:05.770 回答