2016-07-18 18 views
2

多くのオプション/イベントで初期化できるライブラリ(javascript fullCalendar)を使用しています。イベントを複数回登録しないようにするJavaScript

問題は、フォームを送信するときに発生し、ライブラリイベントの1つからいくつかのパラメータが必要なので、イベントに送信イベントを入れます。だから私は持っている:提出

var calendar = $('#calendar').fullCalendar({ 
    .............................. 
     dayClick: function(date, allDay, jsEvent, view) { 
      $("#addEvent").submit(function (event) { 

      //use date variable 

      } 
     }); 
    }); 

まず時間は大丈夫ですが、二度目のトリガ2倍、3倍とそうトリガされた提出三度目を提出します。この問題をどうすれば処理できますか?私は関数を作ることを考えていましたが、関数を呼び出すたびにsubmitイベントが登録され、同じ問題が発生します。

+0

あなたの関数内で 'event.stopImmediatePropagation();'を試してみてください – sumitkanoje

+0

.off()を使ってイベントハンドラをバインド解除することもできます – K48

答えて

2

私の代わりにあなたがdateでキャッシュ以降使用することができます変数を保存することができますdayClickイベントハンドラでsubmitイベントハンドラをバインドしないように、あなたをお勧めします。

var ddate; 
var calendar = $('#calendar').fullCalendar({ 
    dayClick: function(date, allDay, jsEvent, view) { 
     ddate = date; //Persist the date 
    //OR, Persist the date in cache with element 
    //$("#addEvent").data('date', date); 
    }) 
}) 


    //Event handler associate at global level 
$("#addEvent").submit(function (event) { 
    //use date variable 
    var date = ddate; 
    //var date = $("#addEvent").data('date') 
}); 

は限り、あなたの現在の問題として、あなたは、以前のイベントハンドラを削除するために.off()を使用することができます。

初めてイベントを添付するときは、次の呼び出しでは、イベントの再取り付け「タグ」要素除外することができ
dayClick: function(date, allDay, jsEvent, view) { 
     $("#addEvent").off('submit').submit(function (event) { 
      //use date variable 
     }); 
    }); 
+1

なぜ変数にではなく、要素に日付を置くのですか? –

+0

私が開くモーダルにデータ属性を設定しないのはなぜですか?なぜ要素の代わりに変数を使うのですか? –

0

var calendar = $('#calendar').fullCalendar({ 
.............................. 
    dayClick: function(date, allDay, jsEvent, view) { 
     $("#addEvent").not('.eventManaged').addClass('eventManaged').submit(function (event) { 

     //use date variable 

     } 
    }); 
}); 

はそれが役に立てば幸い!

関連する問題