5

这比我知道违背事物精神的通常问题要抽象一些,但我希望我仍然能得到一个好的回应。

这就是问题所在。我们有一个用 PHP 编写的相当复杂的 Web 应用程序。目的相对不重要,但简单地说:我们正在使用 Comet / AJAX / JSON / JavaScript / PHP / MySQL(没有 jQuery,但是,只有原生 JavaScript)来呈现实时显示数据的控件。在整个应用程序中,我们使用原生 JavaScript呈现弹出模式。这是相当复杂的逻辑,它会测试页面上是否存在同名模式并阻止创建相同的新版本,当然,一旦创建,就会创建一个层以防止与下面的链接交互。

问题是我们至少有一个模式可以在页面上呈现之前被多次调用,因为 AJAX 调用从数据库收集数据并将其组装以进行演示需要时间。如果用户要“双击”所述链接,他们将看到两个模态,一个在另一个之上。我已经能够实际渲染其中的 8-10 个。与最顶部的模态交互似乎被破坏了,因为用户实际上正在影响最底部模态的可折叠标题。一旦您开始关闭对话框并到达底部,您就可以看到您单击的位置。

所以,我的问题是:防止这种行为的最佳方法是什么?

我考虑过简单地向 onClick 事件添加一个函数,该函数将在第一次单击后从链接中删除 onClick 属性,并带有轻微的超时(比如 500 毫秒)。我还考虑过尝试实现位测试逻辑,该逻辑将计算点击次数,并且仅在第一次点击后实际首先发生事件,并在模式关闭时重置。

我想知道是否有人有任何想法或建议,甚至已经解决了类似的问题,并且对在这种情况下实现我的目标的最佳实践有一些见解。

非常感谢你。

4

2 回答 2

4

触发后,您可以取消注册单击处理程序:

var element = ...,
myClickHandler = function(event) {
    // ...
    element.removeEventListener('click', myClickHandler, false);
    // ...
}

element.addEventListener('click', myClickHandler, false);
于 2013-05-03T14:59:35.390 回答
0

在这种情况下,我发现最简单的解决方案是最好的,但如果有其他反馈,我仍然很乐意听到。

在这种情况下,我发现操作顺序是问题所在。我正在等待 AJAX 响应以生成此模式的正文 html。我更改了顺序,改为在模态<p>Loading...</p>正文中立即使用创建模态。然后,当 AJAX 完成并且我有了新的正文文本时,我只是将它注入到模态的内容区域,并带有一些简洁的代码,并且 Bob 是你的叔叔,我们有大奖。

于 2013-05-03T14:58:26.153 回答