如何删除Jquery中函数的调用

How to remove the call of a function in Jquery?

本文关键字:函数 调用 Jquery 何删除 删除      更新时间:2023-09-26

我有以下问题,当我启动一个名为Ficha()的函数的应用程序时,它会进行ajax调用,这很好。这个问题是由另一个ajax调用charge html标签引起的,该标签需要调用函数Ficha(),问题是执行了n次加载html内容,当您调用已经加载了n次的函数卡时,执行n次也会抛出"超过最大调用堆栈大小"错误。

$(document).ready(function () {
/**
 * Mostrar la lista correspondiente
 **/
var buscanombre = $('#buscanombre');
buscanombre.click(function (e) {
    e.stopPropagation();
    if (buscarNombre.hasClass('active')) {
        resultadoBus.find('ul').empty();
        BuscarNombre();
        resultadoBus.show();
    } else if (buscarServicio.hasClass('active')) {
        resultadoBus.find('ul').empty();
        BuscarServicio();
        resultadoBus.show();
    } else if (buscarUbicacion.hasClass('active')) {
        resultadoBus.find('ul').empty();
        BuscarUbicacion();
        resultadoBus.show();
    }
    _iBpNActivo = 0;
}).keyup(EfectoKeyup);
Ficha();});

function BuscarNombre() {
$.ajax({
    type: 'GET',
    url: baseUrl + 'site/getfichas',
    success: function (result) {
        listFichasResultados = [];
        var ResultadoBus = resultadoBus.find('ul');
        ResultadoBus.empty();
        var categoria;
        $.each(result, function (index, item) {
            switch (item.categoria) {
                case 'masaje':
                    categoria = '<span class="s-masajes">masajes</span>';
                    break;
                case 'VIP':
                    categoria = '<span class="s-vip">vip</span>';
                    break;
                case 'PREMIUM':
                    categoria = '<span class="s-premium">premium</span>';
                    break;
                case 'GOLD':
                    categoria = '<span class="s-gold">gold</span>';
                    break;
                case 'madura':
                    categoria = '<span class="s-maduras">maduras</span>';
                    break;
                case 'fantasia':
                    categoria = '<span class="s-fantasia">fantasia</span>';
                    break;
                case 'shemale':
                    categoria = '<span class="s-fantasia">shemale</span>';
                    break;
            }
            ResultadoBus.append(
                '<li idFichas="' + item.idFicha + '" data-modal="ficha-full" class="md-trigger" nombrePortada="' + item.nombre + '">' + item.nombre
                + categoria +
                '</li>'
            );
            listFichasResultados.push('<li idFichas="' + item.idFicha + '" data-modal="ficha-full" class="md-trigger" nombrePortada="' + item.nombre + '">' + item.nombre + categoria + '</li>');
        });
        ModalEffects();
        Ficha();
    }
});}

我们的想法是制作一个对象来包装函数,以便能够管理函数是否已经在运行,或者是否已经完成并将再次运行。

还有xhrCount,因为你说过你使用了很多ajax调用,以及知道是否所有调用都完成的方法,你只能在回调上这样做,所以在ajax调用的一侧计数,并在回调中更新一次它的完成,当计数器达到0时,你知道它完成了,你就释放了函数。

var runOneAtATime = {
   running : false,
   xhrCount : 0,
   freeRunning : function(){
     if (--xhrCount === 0){
        console.log('running'); 
     } else {
        this.running = false; 
     }
   },
   runOneAtATime : function (){
      if (this.running === true){
         console.log('running');
         return;
      }
      this.running = true;
      var self = this; //so you be able to call in in callbacks
      //do work
      //each ajax.complete calls self.freeRunning()
   }
}

编辑:注释