正在停止onclick事件处理程序



我有一些工作代码,现在我正在稍微不同的上下文中使用。工作部分是我使用对象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;
}

这有一个错误,它不能处理一个人同时打开多个表单,但这不是我最关心的问题。我会在讨论之外解决它。

生成的表单中的submit和cancel按钮都会恢复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传递给例程,所以它应该到达正确的元素。

有人能帮我做这个吗。同时,我将修复上面提到的事件处理程序错误。

好。所以点击和点击之间是有区别的。未设置onclick事件处理程序,因此它为null。我将click事件监听器的设置更改为将onclick属性设置为:

emailButton.onclick = 
function() { initMailFormButton(this.id, this.dataset.mailname, this.dataset.maildomain, ""); };

一切都很顺利。

为了解决我前面提到的限制,我将saveOnclick变量制作成一个由按钮id键控的关联数组。现在,人们可以随心所欲地点击多个按钮,尽管想要多个按钮可能很少见。

最新更新