0

カレンダーに何かをドロップすると呼び出されるこれがあり、スケジューリング ダイアログが表示されます。そのダイアログのボタンを押すと、ajax 呼び出しが行われます。

初めてクリックすると、1 回の ajax 呼び出しが行われ、次に押すと 2 回の ajax 呼び出しが行われることに気付きました。

btnSchedule のハンドラーは 1 つだけ必要です。

見る:

  $('#btnSchedule').on('click', function () {

.

 drop: function(date, allDay, ev, ui, resource) { // this function is called when something is dropped

                    // retrieve the dropped element's stored Event Object
                    var originalEventObject = $(this).data('eventObject');

                    // we need to copy it, so that multiple events don't have a reference to the same object
                    var event = $.extend({}, originalEventObject);

                    var obj = this;

                    var hours = 1;

                    var id = event.id;
                    var type = event.type;


                   $('#txtFrom').change(function () {
                       $('#txtHours').val('');
                       fillPriorityList("#<%= ddlPriority.ClientID %>",type + id,resource.id,$('#txtFrom').val());
                    });
                    showScheduler(
                        event.title,
                        $.fullCalendar.formatDate(date,'dddd MMMM dd yyyy'),
                        $.fullCalendar.formatDate(date, 'MM/dd/yyyy'),
                        event.canReoccur,event.reoccurVal,"#<%= ddlPeriod.ClientID %>",
                        "#<%= cbPeriod.ClientID %>");

                    fillPriorityList("#<%= ddlPriority.ClientID %>",type + id,resource.id,$('#txtFrom').val());


                    $('#btnSchedule').on('click', function () {
                        var hrs = $('#txtHours').val();
                        var usingHrs = (isNaN(hrs) == false && hrs > 0);
                        var usingRange = isDateRangeValid('#txtFrom','#txtTo');
                        var canRec = event.canReoccur;
                        var periodChecked = $("#<%= cbPeriod.ClientID %>").prop('checked');
                        var recVal = $("#<%= ddlPeriod.ClientID %>").prop('selectedIndex');
                        var priority = $("#<%= ddlPriority.ClientID %>").val();

                        if(usingHrs || usingRange)
                        {
                            var  f = $.datepicker.parseDate('m/d/yy', $('#txtFrom').val());
                            var  t = $.datepicker.parseDate('m/d/yy', $('#txtTo').val());
                            var correctStart = usingHrs ? date : f;
                            $.ajax({
                                type: "POST",
                                url: "CalendarServices.aspx/RegisterEvent",
                                data: 'id=' + id + '&start=' + $.fullCalendar.formatDate(correctStart, 'yyyy-MM-dd')
                                    + '&end=' + $.fullCalendar.formatDate(t, 'yyyy-MM-dd') + '&type=' + type + '&hours=' + hrs + '&resource=' + resource.id
                                 + '&canRec=' +  canRec + '&periodChecked=' + periodChecked + '&recVal=' + recVal + '&priority=' + priority,

                                success: function (data) {
                                    $(obj).remove();
                                    changeUnscheduledHeaders();
                                    closeScheduler();                              
                                    $('#calendar').fullCalendar('refetchEvents');
                                }
   ,
                                error: function () {
                                }
                            });
                        }

                    })


                }

                ,

私のajaxを一度しか呼び出さないようにするにはどうすればよいですか?

ありがとう

4

2 に答える 2

3

再度バインドする前に、クリック ハンドラのバインドを解除してみてください

$('#btnSchedule').off('click').on('click'...

複数回バインドすると、バインドするたびにコールバックが実行されます。

于 2013-03-27T18:27:24.063 に答える
-1

event.stopPropagation();を使用します。そのとおり:

  $('#btnSchedule').on('click', function () {

    event.stopPropagation();

    [the rest of your code]
于 2013-03-27T18:27:39.970 に答える