Javascript 使用JS向动态生成的Squarespace新闻稿块添加隐藏表单字段

Javascript 使用JS向动态生成的Squarespace新闻稿块添加隐藏表单字段,javascript,mailchimp,squarespace,Javascript,Mailchimp,Squarespace,我试图在我的主页新闻稿注册中添加一个隐藏字段,这样我就可以在Mailchimp中跟踪注册来源 这是我正在注入页面的代码,但它抛出了一个“UncaughtTypeError:undefined不是函数”错误,我不知道为什么 这是否与表单的其余部分在页面加载后呈现这一事实有关?(这就是为什么我使用类名来定位表单) var formcontainer=document.getElementsByClassName('newsletter-form'); var input=document.crea

我试图在我的主页新闻稿注册中添加一个隐藏字段,这样我就可以在Mailchimp中跟踪注册来源

这是我正在注入页面的代码,但它抛出了一个“UncaughtTypeError:undefined不是函数”错误,我不知道为什么

这是否与表单的其余部分在页面加载后呈现这一事实有关?(这就是为什么我使用类名来定位表单)


var formcontainer=document.getElementsByClassName('newsletter-form');
var input=document.createElement('input');
input.type='hidden';
input.name='SOURCE';
input.id='SOURCE';
input.value='homepage';
formcontainer.appendChild(输入);

感谢阅读:)

文档。getElementsByClassName
返回一个数组,因此
formcontainer
包含一个元素数组(即使只有一个匹配的元素)

可能是
formcontainer.appendChild(输入)
失败,因为
formcontainer
数组没有名为
appendInput
的函数

尝试更改行
formcontainer.appendChild(输入)
读取
formcontainer[0].appendChild(输入)
并查看这是否修复了错误


您还可以使用Chrome的Inspector或Firefox开发工具在代码中设置断点。要调试这样的错误,我建议将断点放在代码的第一行,然后一次一行地执行,直到错误发生。这将把它缩小到一行,这样您就不用大海捞针了:)

只需用简单的方法,并使用HTML将隐藏字段添加到表单中即可:

如果出于某种原因您必须使用JavaScript,请将此脚本放在关闭标记的前面:

<script language="JavaScript">  document.getElementById('newsletter-form').innerHTML += "<input type='hidden' value='homepage' />";
</script>
document.getElementById('newsletter-form').innerHTML+=“”;
另外,将
id=“newsletter form”
属性添加到您的
标记中

这将使用指定的
id
将指定的HTML代码添加到表单中


我希望我能帮助你:)

修复了我做的两件事:)

(1) 在运行脚本之前等待DOM加载
(2) 迭代getElementsByClassName以获取数组中的第一项。{不必费心循环,因为我每页只有一个表单}

<script language="JavaScript">
document.addEventListener("DOMContentLoaded", theDomHasLoaded, false); 
function theDomHasLoaded(e) {
  var formelements = document.getElementsByClassName('newsletter-form');
  formelements[0].innerHTML += "<input name='SOURCE' id='SOURCE' type='hidden' value='homepage' />";
}
</script>

文件。添加的文件列表(“DOMContentLoaded”,domHasLoaded,false);
函数已加载(e){
var formelements=document.getElementsByClassName('newsletter-form');
formelements[0]。innerHTML+=“”;
}

谢谢!但问题是我不能直接控制表单的内容。。。它由Squarespace使用脚本生成。你知道我如何添加id吗?或者改为以表单的类为目标?``谢谢,但不幸的是,我仍然会遇到同样的错误。断点总是让我迷惑,我将尝试:)
<script language="JavaScript">
document.addEventListener("DOMContentLoaded", theDomHasLoaded, false); 
function theDomHasLoaded(e) {
  var formelements = document.getElementsByClassName('newsletter-form');
  formelements[0].innerHTML += "<input name='SOURCE' id='SOURCE' type='hidden' value='homepage' />";
}
</script>