在再次被调用之前取消调用函数

Uncall called function before getting called again

本文关键字:调用 取消 函数      更新时间:2024-02-04

在再次调用被调用的函数之前,有什么方法可以取消调用吗?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>

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

$(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
        }
    });
}

每次ajax调用完成时,都会执行readydoc,它将附加事件处理程序。每次调用都会附加越来越多的事件处理程序。相反,在页面加载时调用一次事件附加函数:

$(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调用运行了多少次。