0

開いたときに部分ビューをロードするモデルがあります。

部分ビューにはjQuery関数があります。モーダルを開くと、jQueryは実行されません。

モーダルのサイズを変更するとすぐに、jQueryが実行され、期待どおりの結果が得られます。

これがhtmlをロードしてモーダルを開くコードです

 $(document).ready(function () {
        $("#reschedule").button().click(function () {

                            var url = $("#rescheduleUrl").attr('href');

                            $.ajaxSetup({ cache: false });
                            $.ajax({
                                url: url,
                                success: function (data) {
                                    $("#rescheduleDiv").html(data);
                                    $("#rescheduleDiv").dialog('open');
                                }
                            });
        });
    });

ロードされた部分ビューから、すぐに実行する必要があるjQueryがここにあります。

$('#calendar').fullCalendar({
    theme: true,
    header: {
        left: 'month,agendaWeek,agendaDay',
        center: 'title',
        right: ''
    },
    defaultView: 'agendaWeek',
    editable: false,
    minTime: 5,
    maxTime: 20,
    events: "/ServiceTicket/GetCalendarEvents/",
    allDaySlot: false
});

包んでみました

   $(document).ready(function() {
     ...
   });

同じ結果になります。

これをすぐに実行するために私がする必要がある考えはありますか?私はそれをfirebugで見ましたが、モーダルのサイズが変更されたときに実行されますが、それまでは実行されません。

ありがとう!

4

1 に答える 1

1

部分ビューのJQueryもdocument.ready関数でラップする必要があると思います。これは、部分ビューから「ポップアップ」されるカラーボックスモーダルでJQueryを起動する方法です。

 $(document).ready(function () {
$('#calendar').fullCalendar({
    theme: true,
    header: {
        left: 'month,agendaWeek,agendaDay',
        center: 'title',
        right: ''
    },
    defaultView: 'agendaWeek',
    editable: false,
    minTime: 5,
    maxTime: 20,
    events: "/ServiceTicket/GetCalendarEvents/",
    allDaySlot: false
});
});

編集

親ページのロード/表示機能を逆にすると、問題が解決する可能性があると思います。

success: function (data) {    
    $("#rescheduleDiv").dialog('open');
    $("#rescheduleDiv").html(data);
 } 

ダイアログを「表示」する前にhtmlを設定することにより、ダイアログを操作するまで、doc.ready関数がイベントハンドラーと一緒に起動されない場合があります。最初に表示してからhtmlデータをロードすると、イベントハンドラーは期待どおりに機能することを示します。

于 2012-06-01T17:21:34.140 に答える