0

カレンダーページ:

$(document).delegate('#ViewOrders', 'pageinit', function () {
   var ordersSource, calendar;
   var ordersParams = new Object();
   var tonnageParams = new Object();
   if (parseInt($("#ddlRooms").val()) > 0) {
       tonnageParams.RoomId = $("#ddlRooms").val();
   }

   $.post('/AdminPages/Mobile/Ajax/Ajax.ashx?p=GetTonnage', tonnageParams, function (data) {
       ordersSource = data;

       setTimeout(function () {
           calendar = $("#calendar").fullCalendar({
              header: {
                   left: 'prev,next today',
                   center: '',
                   right: 'title'
               },
               isRTL: false,
               theme: true,
               selectable: true,
               select: function (start, end, allDay) {
                   ordersParams.Start = getDateString(start);
                   ordersParams.End = getDateString(end);

                   if ($("#ddlRooms").val() > 0) {
                       ordersParams.RoomId = $("#ddlRooms").val();
                   }
                   else {
                       delete ordersParams.RoomId;
                   }

                   $.mobile.changePage("ShowOrders.aspx", { data: ordersParams, transition: 'slide', rel: 'dialog' });
                calendar.fullCalendar('destroy');
               },
               events: ordersSource
           });
       }, 500);
   });

   $("#ddlRooms").change(function () {
       var elem = $(this);

       calendar.fullCalendar('removeEventSource', ordersSource);
       tonnageParams = new Object();

       if (parseInt(elem.val()) > 0) {
           tonnageParams.RoomId = elem.val();
       }

       $.post('/AdminPages/Mobile/Ajax/Ajax.ashx?p=GetTonnage', tonnageParams, function (data) {
           ordersSource = data;
           calendar.fullCalendar('addEventSource', ordersSource);
       });
    }); 
 });

結果ページ:

$(document).delegate('#ViewOrders', 'pageinit', function () {
$("#btnBack").click(function () {
    var id = $(this).data('backid');
    $.mobile.changePage("ViewOrders.aspx", { data: { RoomId: id }, reloadPage: true, transition: 'slide', reverse: true });
});
});

(スクリプトは 1 つのファイルにあり、アプリケーションの開始時にアップロードされ、ページは読み込まれません。)

私がやろうとしているのは、カレンダー付きのページを持つことです。日付を選択すると、ユーザーは日付選択パラメーターを使用して別の日付に移動します。2 ページ目に、その日付の注文が表示されます。カレンダーに戻るボタンもあります。私の問題は、彼が選択した「ddlRooms」のカレンダー変更イベントに戻ると、「投稿」が2回発生することです。私はこれをやろうとしました:

$("#ddlRooms").unbind('change').change(function () {
...
});

しかし、UI の選択が正しく機能しません。

4

1 に答える 1

1

イベントのバインド/バインド解除とオン/オフの代替手段があります。jQueryイベントフィルターを使用して再度バインドする前にバインドを解除する代わりに、イベントが既にバインドされているかどうかを識別するために使用できます。

http://www.codenothing.com/archives/2009/event-filter/

これは私の使用例です:

$('#carousel div:Event(!click)').each(function(){

});

私のカルーセルdivには多くの内部ブロックがあるため、それぞれを使用していますが、原則は同じです。#carousel の内部 div 要素にクリック イベントがない場合は、そのイベントを追加します。あなたの場合、これにより複数のイベントバインディングが防止されます(それが問題の場合)。

于 2012-12-11T13:17:45.320 に答える