我试图在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>
感谢阅读:)
答案 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
的表单中。
我希望我帮助过你:)