【问题标题】:How can I stop a JqueryUI Modal Dialog from being initiated multiple times?如何阻止 JqueryUI 模态对话框多次启动?
【发布时间】:2012-10-02 22:07:53
【问题描述】:

这是场景 - 没有代码(这样更简单):

  1. 加载包含内容(包括脚本)的 div。
  2. 其中一个脚本是 JqueryUI 模态对话框的初始化 - 该对话框稍后会在脚本中通过单击事件“打开”...也就是说,它不会同时被初始化和打开。
  3. 点击事件会打开这个具有表单的模式。
  4. 提交表单后,会进行 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


【解决方案1】:

在我看来,这可以通过简单地使用$.one()函数http://api.jquery.com/one/来解决

【讨论】:

  • 试一试..查看我的编辑以了解我尝试过的内容。不幸的是没有工作。
  • 好的,我想我知道您的问题是什么:您可能正在尝试为单击事件动态添加处理程序。看看这个帖子,希望对你有帮助:stackoverflow.com/questions/1178141/…
  • 我读到了……这似乎是合乎逻辑的——但对我来说并非如此。但这是很好的信息...谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-02-27
  • 1970-01-01
  • 2011-10-18
  • 2012-03-10
  • 2011-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多