1

FullCalendar に問題があり、解決策を探していましたが成功しませんでした。eventClick を使用して、現在のイベントのデータを含むオーバーレイ フォームを開きます。気が変わって、このイベントを編集するのではなく、別のイベントを編集したくないまで、すべてがうまく機能します。そして、それにより、開かれたイベント(編集の準備ができていたがフォームが送信されなかった)に対して1回、実際に編集および送信されたイベントに対して1回、ajax送信リクエストが2回発生します。

$('#sc-calendar').fullCalendar({
    eventClick: function(event) {   
       //opening overlay form window
              $('#submit-event-update').bind('click',function() { //click submit
                $.ajax({
                  type: "GET",
                  url: "event_update",
                  data: "id="+event.id+"&title="+event.title+"&start="+event.start+"&end="+event.end,
                  cache: false,
                  success: function() {
                    $('#submit-event-update').unbind();
                    $('#sc-calendar').fullCalendar('updateEvent',event);
                  }
                });
              });
            }
        });

これは私の悪夢になり始めています。助けてください!

4

1 に答える 1

0

onclickのイベントリスナーに問題があるように思え#submit-event-updateます。

次のようにコードを変更する必要があります。

$('#sc-calendar').fullCalendar({
    eventClick: function(event) {

    //opening overlay form window

    //Assign the event id of this event to the global variable event_id
    event_id = event.id;  
    }
});

$('#submit-event-update').bind('click',function() { //click submit
   $.ajax({
      type: "GET",
      url: "event_update",
      data: "id=" + event_id + ..., //Note how event.id is not used anymore
      cache: false,
      success: function() {
         $('#sc-calendar').fullCalendar('updateEvent',event);
      }
   });
 });

onclickイベントがクリックされるたびにイベント ハンドラーをボタンにバインドするのではなく、1 回だけバインドするように変更しました。event_idまた、現在のイベントの ID の値を保持する変数を割り当てます。

では、説明を。あなたが言った:

気が変わって、このイベントを編集するのではなく、別のイベントを編集したくないまで、すべてがうまく機能します。

イベントをクリックするとどうなりますか?

onclickイベントを にバインドし#submit-event-updateます。ボタンをクリックするとsuccess()、AJAX 呼び出しのコールバックに入り、ボタンのバインドが解除されます。しかし、気が変わって送信ボタンをクリックしなかった場合はどうなるでしょうか。onclickこれで、古いデータが既にボタンに関連付けられている 1 つのリスナーができました。別のイベントを選択すると、2 つのイベント リスナーが同じボタンに関連付けられているため、AJAX リクエストが 2 回送信されます。

JavaScript がイベント バインディングを処理する方法については、こちらを参照してください。

于 2013-05-11T20:40:43.850 に答える