【发布时间】:2020-10-16 02:00:49
【问题描述】:
我现在在稍微不同的上下文中使用一些工作代码。工作部分是我使用对象 onclick 事件来调出一个表单来发送电子邮件。当它在 HTML 页面中时,它工作正常。我会有很多这样的按钮:
<button id="mail-c1" onclick="initMailFormButton(this.id, 'someone','somedomain.com','a subject')">Someone's Name</button>
整个表单是用 javascript 创建的,并且有自己的提交和取消按钮,但在按钮元素中。为了能够在表单中输入数据,我需要杀死 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 传递给例程,所以它应该到达正确的元素。
谁能帮我解决这个问题。同时,我将修复上面提到的事件处理程序错误。
【问题讨论】:
标签: javascript event-handling dom-events