如何防止一个模态被绘制多次
How to prevent a modal from being drawn more than once?
这比通常的问题更抽象,我知道这违背了事情的精神,但我希望我仍然可以得到一个好的回答。
问题就在这里。我们有一个用PHP编写的相当复杂的web应用程序。目的相对不重要,但简单地说:我们正在使用Comet/AJAX/JSON/JavaScript/PHP/MySQL(没有jQuery,但是,只有原生JavaScript)来呈现实时显示数据的控件。在整个应用程序中,我们使用原生JavaScript渲染弹出模式。测试页面上是否存在同名的模态,并防止创建相同的新版本,这是相当复杂的逻辑,当然,一旦创建了一个层,就会创建一个层,以防止与下面的链接交互。
问题在于,我们至少有一个模态在呈现在页面上之前可以被多次调用,因为AJAX调用需要花费时间从数据库收集数据并将其组装起来用于表示。如果用户要"双击"所述链接,他们将看到两个情态,一个在另一个之上。我已经能够渲染其中的8-10个了。与最上面的模态交互似乎被破坏了,因为用户实际上是在最下面的模态上影响可折叠的标题。一旦你开始关闭对话框并到达底部,你就可以看到你点击的地方。
所以,我的问题是:什么是最好的方法来防止这种行为?我考虑过简单地向onClick事件添加一个函数,该函数将在第一次点击后从链接中删除onClick属性,并有一个小超时(比如500ms)。我还考虑尝试实现位测试逻辑,计数点击,实际上只有第一次点击后的事件,当模态关闭时重置。
我想知道的是,如果有人有任何想法或建议,甚至已经解决了类似的问题,并对实现我在这种情况下的目标的最佳实践有一些见解。
非常感谢。
可以在click处理程序触发后取消注册:
var element = ...,
myClickHandler = function(event) {
// ...
element.removeEventListener('click', myClickHandler, false);
// ...
}
element.addEventListener('click', myClickHandler, false);
在这种情况下,我发现最简单的解决方案是最好的,但我仍然希望听到其他的反馈,如果有的话。
在这种情况下,我发现操作顺序是问题所在。我一直在等待AJAX响应来为这个模态生成主体html。我改变了顺序,而是在模态的主体内立即使用<p>Loading...</p>
创建模态。然后,当AJAX完成并且我有了新的正文文本时,我只需要将它注入到模态的内容区域中,并添加一段简洁的代码,这样一来,我们就成功了。
- 我想使用模态通过php文件发送邮件,并且我希望在提交关闭后关闭pop
- 打开一个模态并将其链接到AngularJS中的指令
- SemanticUI模态not onDeny/onApprove事件未激发
- 有没有比在app.js上绑定模块名称更好的方法来动态加载视图模型和视图以显示模态
- 如何通过所选索引(AngularJS)在模态弹出窗口中显示数据
- 包含数据库中相关信息的开放模态
- bootstrap消除模态并显示另一个模态
- 模态提示-如何重写此代码
- 模态框无法正常工作
- 将数据传递给由服务创建的Ionic模态
- iframe模态无法关闭
- 点击AngularJS模态窗口捕捉背景事件
- jqueryajax调用是复制url,当在模态视图之后在外部js文件中进行调用时
- 使用模态对话框(JQuery)编辑函数
- 如何在模态实例中使用filter
- 页面上有多个模态框
- 如果满足某些条件,如何在不调用模态的情况下首先调用类
- 在将缩略图链接到模态时遇到问题
- jQuery模态弹出的行为类似于确认和警报对话框
- 如何防止一个模态被绘制多次