我有一些正在使用的工作代码,它们在稍微不同的上下文中使用。工作部分是我使用对象的onclick事件调出一个表单来发送电子邮件。当它在HTML页面中时,它可以正常工作。我会有很多看起来像这样的按钮:
<button id="mail-c1" onclick="initMailFormButton(this.id, 'someone','somedomain.com','a subject')">Someone's Name</button>
整个表单都是使用javascript创建的,并且具有自己的“提交”和“取消”按钮,但位于button元素内。为了能够将数据输入表单,我需要杀死onclick事件,然后在提交或取消电子邮件后将其还原。 onclick处理程序的开头为:
function initMailFormButton(mailId, eName, eDomain, eSubject) {
myFormLocation = document.getElementById(mailId);
stopFormClick(myFormLocation);
其中的stopFormClick函数为:
function stopFormClick(myFormLocation) {
saveOnclick = myFormLocation.onclick;
myFormLocation.onclick = null;
}
这有一个错误,即不能处理某个人一次打开多个表单的错误,但这不是我的直接关注。我将在讨论之外进行修复。
生成的表单中的“提交”和“取消”按钮均会还原onclick事件处理程序,因此您可以很开心地多次打开和关闭表单。
我的新情况是我正在从数据库生成HTML页面。我正在使用HTML数据集来存储以前的硬编码信息,如下所示:
emailButton.setAttribute("data-mailname", emailName);
emailButton.setAttribute("data-maildomain", emailDomain);
emailButton.addEventListener("click", function() { initMailFormButton(this.id, this.dataset.mailname, this.dataset.maildomain, ""); }, false);
正在检索的信息正确,并且表格显示在正确的位置。但是,我无法输入信息,因为当我在第一个表单字段中单击并生成另一个表单时,原始的onclick处理程序会启动。
我唯一的线索是,当我查看保存在静态HTML页面中的onclick事件的值时,它具有预期值,但在生成的页面中为null。我觉得这很混乱,因为我将(唯一的)元素ID传递给例程,因此它应该到达正确的元素。
有人可以帮助我吗?同时,我将修复上面提到的事件处理程序错误。
答案 0 :(得分:0)
好。因此,单击和onclick之间是有区别的。未设置onclick事件处理程序,因此为null。我将设置click事件监听器更改为将onclick属性设置为:
emailButton.onclick =
function() { initMailFormButton(this.id, this.dataset.mailname, this.dataset.maildomain, ""); };
一切正常。
要处理我前面提到的限制,我将saveOnclick变量制成了一个以按钮id为键的关联数组。现在人们可以根据需要单击任意数量的按钮-尽管想要多个按钮可能很少见。