2015-12-18 15 views
7

Ho un pulsante. onclick Sto cambiando la classe di quel pulsante ma quando faccio doppio clic sulla sua classe che cambia. Tutte le mie funzionalità depend on current class come disattivare il doppio clic o completare la richiesta al primo clic.Jquery - Problemi con doppio clic perché cambia in classe

function data() { 
    lastScrollTop = 0; 
    document.getElementById("expand-dataset-btn").disabled = false; 
    var id = event.target.id 
    var allChildern = null 
    if(!$(".id_"+event.target.id).hasClass('minus-symbol')){ 
     $(".id_"+event.target.id).removeClass('plus-symbol').addClass('minus-symbol') 
     $.ajax({ 

      }, 
      success : function(result) { 

      } 
     }); 
    }else{ 
     $(".id_"+event.target.id).addClass('plus-symbol').removeClass('minus-symbol') 
     $.ajax({ 

      }, 
      success : function(result) { 

      } 
     }); 
    } 
} 

la funzione di chiamata dal regolatore come qui di seguito

htmlDataId += "<a onclick=\"data()\" title='View' id="+row[primaryField]+"> 
+0

Forse stai sbagliando nel tuo flusso. Metti l'allarme in funzione e traccia. Ogni volta che entra nella funzione. –

+0

Se è possibile pubblicare anche il codice HTML –

+0

È necessario attendere il completamento di ajax. Cambia classe dopo 'successo'. –

risposta

0

Si consiglia di attendere per l'Ajax per completare

function data() { 

    lastScrollTop = 0; 
    document.getElementById("expand-dataset-btn").disabled = false; 
    var id = event.target.id; 
    var allChildern = null; 

    if($(".id_"+ id).hasClass("disable")) 
    { 
      event.preventDefault();    
    } 

    if(!$(".id_"+ id).hasClass('minus-symbol')){ 
     //make control disable 
     $(".id_"+ id).addClass('disabled'); 
     $.ajax({ 

      }, 
      success : function(result) { 
      //change here after success 
      $(".id_"+ id).removeClass('plus-symbol').addClass('minus-symbol'); 
      //remove control disable 
      $(".id_"+ id).removeClass('disabled'); 
     }); 
    }else{ 
     //make control disable 
     $(".id_"+ id).attr('disabled', true); 
     $.ajax({ 

      }, 
      success : function(result) { 
      //change here after success 
       $(".id_"+ id).addClass('plus-symbol').removeClass('minus-symbol'); 
       //remove control disable 
       $(".id_"+ id).attr('disabled', false); 
      } 
     }); 
    } 
} 
+0

Perché dovrebbe aspettare? –

+0

La seconda chiamata ajax viene eseguita solo se la classe non è impostata. Questo risolverà il suo problema per il secondo istante di chiamata/doppio clic. –

+0

No! le chiamate ajax non fanno nulla qui! –

0

quello che vi serve è la funzione "throttle" o la funzione "di rimbalzo".

La limitazione è un mezzo mediante il quale possiamo limitare il numero di volte che una funzione può essere chiamata in un dato periodo. Ad esempio, potremmo avere un metodo che dovrebbe essere chiamato non più di 5 volte al secondo.

è possibile utilizzare sottolineare underscore official website

o

è possibile utilizzare i seguenti codici:

/*trigger specific eventhandler when the event is idle for specific time*/ 
function debounce(fn, delay, self) { 
    var timer = null; 
    return function() { 
     var context = self ? self : this, args = arguments; 
     clearTimeout(timer); 
     timer = setTimeout(function() { 
     fn.apply(context, args); 
     }, delay); 
    }; 
} 
//use in the following way 
$input.on('click',debounce(clickCallback,250)); 

allora se il secondo evento "click" attivato all'interno di 250ms, sarà ignorato

Problemi correlati