[英]stopping onclick event handler
我有一些工作代码,我现在在稍微不同的上下文中使用它们。 工作部分是我使用对象 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 事件的值时,它具有预期值,但在生成的页面中为空。 我觉得这很令人困惑,因为我将(唯一的)元素 id 传递给例程,因此它应该到达正确的元素。
任何人都可以帮助我解决这个问题。 同时,我将修复我上面提到的事件处理程序错误。
好的。 所以这是click和onclick之间的区别。 未设置 onclick 事件处理程序,因此它为空。 我将单击事件侦听器的设置更改为将 onclick 属性设置为:
emailButton.onclick =
function() { initMailFormButton(this.id, this.dataset.mailname, this.dataset.maildomain, ""); };
一切正常。
为了处理我之前提到的限制,我将 saveOnclick 变量变成了一个由按钮 id 键控的关联数组。 现在人们可以点击任意数量的按钮——尽管想要拥有多个按钮的情况可能很少见。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.