【发布时间】:2012-10-02 22:07:53
【问题描述】:
这是场景 - 没有代码(这样更简单):
- 加载包含内容(包括脚本)的 div。
- 其中一个脚本是 JqueryUI 模态对话框的初始化 - 该对话框稍后会在脚本中通过单击事件“打开”...也就是说,它不会同时被初始化和打开。
- 点击事件会打开这个具有表单的模式。
- 提交表单后,会进行 ajax 调用 - 将数据保存到数据库,然后使用“.load”函数重新加载整个 div——再次加载该组脚本(包括初始化模式)
那么...
[编辑]
第一次单击打开模式和表单时,一切正常。任何后续时间 - 多次运行表单和 ajax 调用。
[/edit]
对我来说似乎很清楚,再次初始化模式会导致在点击事件触发时调用两个实例。
苏..
有没有办法(因为 - 请记住 - 保存此代码的 div 正在重新加载 - 是的,我已经尝试将它放在该 div 之外......不行)来阻止初始化再次发生?
这是我尝试使用 $.one 函数的方法:
$("body").one("load", function(e){
$("#scheduleMessagePopupDiv").dialog({
autoOpen: false,
height: 450,
width: 340,
modal: true,
resizeable: false,
dragable: false
});
alert("hello");
});
没用..警报永远不会触发...显然对话框从未初始化。
【问题讨论】:
-
你能发布相关脚本/html吗?如果可能的话,另外在jsfiddle.net 上摆弄一下DEMO,当前的场景/问题也会有很大帮助。
-
我真希望我能做到。但是这个客户非常对这个代码信息的泄露非常敏感。真的试图找到一种方法来检测 JqueryUI 模式是否已经被初始化。如果我能找到 - 那么我下次会简单地阻止加载。
-
我认为解决此问题的最简单方法是将所有对话框初始化和对话框的 div 简单地嵌入到房屋页面中 - 在重新加载的 div 之外。这似乎是唯一正确(并且可能是正确)的方法。
-
这可能与多个绑定有关。从我的回答中尝试解决方案。尽管这可能与您初始化对话框的方式有关。无论如何试一试,然后告诉我。
-
我删除了我的答案,看到将对话初始化移出解决了问题,毕竟它与多个绑定无关。很高兴你找到了解决方案:)
标签: jquery dialog modal-dialog