1

我正在使用以下代码在我的应用程序中实现 Simplemodal:

$(".dialog-link").live('click', function(e) {
 e.preventDefault();
 $.get($(this).attr('href'),function(data) {
  $.modal(data, {onOpen: open, position: ['10%','30%']});
 );
});

(仅供参考:onOpen 回调只是设置了一些高度)

ajax 调用返回的文档(包含在数据中)有一些对 datepicker 的 jquery 调用等。但是当我的对话框显示 datepicker 时将不起作用。

我知道我可以从 onShow 回调中打开 datepicker,但理想的方法是调用 data 中包含的函数,因为每个对话框都可以有不同的 jquery 调用。

有没有办法做例如

onShow: function(dialog) { dialog.data.my_function(); }

谢谢,迈克尔

4

2 回答 2

1

正如 DOM 检查可能显示的那样(firebug 总是很方便......),模态对话框将外部文档加载到 div 中,去除<html>and <head>标签。它似乎也导入到加载文档中定义的主窗口对象和函数的范围内。

因此,像在另一个窗口或框架( dialog.data.my_function )的范围内一样调用函数将不起作用。

相反,对我有用的是将外部函数直接绑定到 onShow 事件。

主要文件:

    <script type="text/javascript">
        $("a.dialog-link").live('click', function(e) {
           e.preventDefault(); 
           $.get($(this).attr('href'),function(data) {
           $.modal(data, {position: ['10%','30%'], onShow: function(dialog){ 
                                                           external_function()
           }});
         });
    </script>

外部文档(加载到模态框:)

<html><head><title>bla bla </title>
   <script type="text/javascript">
      function external_function(){$("#external_content").text("UPDATED!")};
   </script>
</head>
<body>
 <div id="external_content"> .... </div>
</body>
</html>

希望这可以帮助 :)

于 2009-08-08T09:34:07.933 回答
1

扩展@And 答案。由于 live() 在 jQuery 1.9 中被移除:

$(document).on("click","a.dialog-link",function(e) {
    e.preventDefault();
    $.get($(this).attr("href"),function(data) {
        $.modal(data, {position: ["10%','30%"], onShow: function(dialog){
            external_function()
        }});
    });
});
于 2013-01-18T12:55:58.500 回答