在再次调用之前,Uncall调用函数

时间:2015-02-19 16:13:16

标签: javascript jquery ajax

有没有办法在再次调用之前取消调用函数?在ajax调用成功后,内容被加载,我调用我的函数(在html(数据)之后)因为在其他情况下它不起作用。如果我再次加载内容,功能是重复的,例如。我的所有提醒都显示两次。 (如果我进行了10次ajax调用,我会得到10个警报而不是一个警告。

我试图只调用一次函数(在第一次ajax调用之后),但之后它只能用于第一次ajax调用,并在另一次调用后停止工作。

我在这种情况下唯一的想法是在另一个电话之前取消功能,但我没有找到任何结果。

// If I don't call this function in ajax call below code doesn't work
// Ajax loaded content
function readydoc()
{
    $(document).on("change","#example1",function(){
    // SOME CODE
   }

   $(document).on("change","#example2",function(){
    // SOME CODE
   }

   $(document).on("change","#example3",function(){
    // SOME CODE
   }

   $(document).on("change","#example4",function(){
    // SOME CODE
   }
}


// MY AJAX CALL
function displayPhoto(photoid){
    $.ajax({
        url: "includes/displayphoto.php?photo_id="+photoid
    }).done(function(data) {    
        if (data == false)
        {
            alert ("ERROR");
        }
        else
        {
            $('#content').html(data);
            readydoc(); // Here I call my function
        }
    });
}

// HTML
<div id="content"> <!-- ALL AJAX STUFF GOES HERE <-->
   <div id="example1"></div> <!-- loaded by ajax <-->
   <div id="example2"></div> <!-- loaded by ajax <-->
   <div id="example3"></div> <!-- loaded by ajax <-->
   <div id="example4"></div> <!-- loaded by ajax <-->
</div>

2 个答案:

答案 0 :(得分:1)

每次你的ajax调用结束时,你正在执行附加事件处理程序的readydoc。每次调用都会附加越来越多的事件处理程序。相反,请调用您的事件附加功能once on page load

$(function() {
   //this will run once when the page has loaded
   $(document).on("change","#example1",function(){
    // SOME CODE
   }

   $(document).on("change","#example2",function(){
    // SOME CODE
   }

   $(document).on("change","#example3",function(){
    // SOME CODE
   }

   $(document).on("change","#example4",function(){
    // SOME CODE
   }
});

从您的ajax调用中删除对readydoc的调用 - 不需要它。无论ajax调用运行多少次,这都只会附加一次事件处理程序。

答案 1 :(得分:1)

正如我在评论中提到的,这就是你的代码应该是这样的:

$(document).ready(function(){
   $(document).on("change","#example1",function(){
     // SOME CODE
   }
   $(document).on("change","#example2",function(){
     // SOME CODE
   }
   $(document).on("change","#example3",function(){
     // SOME CODE
   }
   $(document).on("change","#example4",function(){
     // SOME CODE
   } 
});

function readydoc()
{
   //SOME OTHER CODE YOU WANT TO TRIGGER AFTER EVERY AJAX CALL
}

// MY AJAX CALL
function displayPhoto(photoid){
    $.ajax({
        url: "includes/displayphoto.php?photo_id="+photoid
    }).done(function(data) {    
        if (data == false)
        {
            alert ("ERROR");
        }
        else
        {
            $('#content').html(data);
            readydoc(); // Here I call my function
        }
    });
}