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

时间:2015-03-17 10:50:18

标签: javascript mailchimp squarespace

我试图在http://greig.cc/的主页简报注册中添加一个隐藏字段,以便我可以跟踪Mailchimp中的注册源。

这是我注入页面的代码,但它会引发一个未被捕获的TypeError:undefined不是一个函数'错误,我无法解决原因。

是否与页面加载后呈现表单的其余部分有关? (这就是我使用类名来定位表单的原因。)

<script type="text/javascript">
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(input);
</script>

感谢阅读:)

3 个答案:

答案 0 :(得分:2)

修正了我做两件事:)

(1)在运行脚本之前等待DOM加载
(2)通过getElementsByClassName迭代获取数组中的第一项。 {没有麻烦循环,因为我每页只有1个表格}

<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>

答案 1 :(得分:-1)

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

formcontainer.appendChild(input)可能导致失败,因为formcontainer数组不具备名为appendInput的函数。

尝试将行formcontainer.appendChild(input);更改为阅读formcontainer[0].appendChild(input);,看看是否能解决错误。

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

答案 2 :(得分:-1)

只需按照简单的方式进行操作,然后使用HTML将隐藏字段添加到表单中:

<input type="hidden" value="homepage" />

如果由于某种原因您必须使用JavaScript,请将此脚本放在结束</head>标记之前:

<script language="JavaScript">  document.getElementById('newsletter-form').innerHTML += "<input type='hidden' value='homepage' />";
</script>

另外,将id="newsletter-form"属性添加到<form>标记中。

这会将指定的HTML代码添加到具有指定id的表单中。

我希望我帮助过你:)