Javascript 为什么我的处理程序被多次调用?

Javascript 为什么我的处理程序被多次调用?,javascript,jquery,Javascript,Jquery,当我把东西放到日历上时,它会显示一个日程安排对话框,当我按下对话框上的按钮时,它会发出一个ajax调用 我注意到,第一次单击它时,会发出1个ajax调用,下一次按下,2个ajax调用,依此类推 我只需要btnSchedule的1个处理程序: 见: drop:function(date、allDay、ev、ui、resource){//当删除某些内容时,将调用此函数 //检索已删除元素的存储事件对象 var originalEventObject=$(this.data('eventObject

当我把东西放到日历上时,它会显示一个日程安排对话框,当我按下对话框上的按钮时,它会发出一个ajax调用

我注意到,第一次单击它时,会发出1个ajax调用,下一次按下,2个ajax调用,依此类推

我只需要btnSchedule的1个处理程序:

见:

drop:function(date、allDay、ev、ui、resource){//当删除某些内容时,将调用此函数
//检索已删除元素的存储事件对象
var originalEventObject=$(this.data('eventObject');
//我们需要复制它,这样多个事件就不会引用同一个对象
var事件=$.extend({},originalEventObject);
var obj=这个;
var小时=1;
var id=event.id;
var type=event.type;
$('#txtFrom')。更改(函数(){
$('#txtHours').val('');
fillPriorityList(“#”,type+id,resource.id,$(“#txtFrom').val());
});
showScheduler(
event.title,
$.fullCalendar.formatDate(日期,'dddd-MMMM-dd-yyyyy'),
$.fullCalendar.formatDate(日期为“MM/dd/yyyy”),
event.canReoccur,event.reoccurVal,“#”,
"#");
fillPriorityList(“#”,type+id,resource.id,$(“#txtFrom').val());
$('btnSchedule')。在('click',函数(){
var hrs=$('#txtHours').val();
var usingHrs=(isNaN(hrs)=false&&hrs>0);
var usingRange=IsDaterRangeValid(“#txtFrom“,“#txtTo”);
var canRec=event.canReoccur;
var periodChecked=$(“#”)prop('checked');
var recVal=$(“#”)prop('selectedIndex');
var优先级=$(“#”)val();
如果(使用小时数| |使用范围)
{
var f=$.datepicker.parseDate('m/d/yy',$('#txtFrom').val();
var t=$.datepicker.parseDate('m/d/yy',$('#txtTo').val());
var correctStart=usingHrs?日期:f;
$.ajax({
类型:“POST”,
url:“CalendarServices.aspx/RegisterEvent”,
数据:“id=”+id+”&start=”+$.fullCalendar.formatDate(正确开始,“yyyy-MM-dd”)
+'&end='+$.fullCalendar.formatDate(t,'yyyyy-MM-dd')+'&type='+type+'&hours='+hrs+'&resource='+resource.id
+“&canRec=”+canRec+”&periodChecked=”+periodChecked+”&recVal=“+recVal+”&priority=”+priority,
成功:功能(数据){
$(obj.remove();
changeUnscheduledHeaders();
closeScheduler();
$(“#日历”).fullCalendar('refetchEvents');
}
,
错误:函数(){
}
});
}
})
}
,
我该怎么做才能让它只调用我的ajax一次呢


谢谢

再次绑定之前,请尝试解除单击处理程序的绑定

$('#btnSchedule').off('click').on('click'...
如果多次绑定,则每次绑定时都会执行回调。

按如下方式使用:


因为你一直在绑定click事件,上面解释得很清楚,“这个函数在删除某个内容时被调用”,这意味着每次删除某个内容时都会注册一个新的click处理程序。
 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 () {
                                }
                            });
                        }

                    })


                }

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

    event.stopPropagation();

    [the rest of your code]