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 を開くことができることはわかっていますが、各ダイアログで jquery 呼び出しが異なる可能性があるため、データに含まれる関数を呼び出すのが理想的です。

たとえば、何か方法はありますか

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

ありがとう、マイケル

4

2 に答える 2

1

<html>DOM インスペクションで明らかになる可能性があるため (firebug は常に便利です...)、モーダル ダイアログは外部ドキュメントを div にロードし、 タグと タグを取り除き<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 の回答を展開します。jQuery 1.9 で live() が削除されたため:

$(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 に答える