Ich habe eine Funktion erstellt, die jedes Mal aufgerufen wird, wenn die Werte meiner Schieberegler geändert werden. Das Problem besteht darin, dass diese Funktion ein Array generiert, das später an andere Funktionen übergeben wird. So weit, so gut, aber die Schieberegler können so oft angepasst werden, wie der Benutzer es möchte, und wie gesagt, dies löst die Funktion aus, die ein Array generiert, was bedeutet, dass ich Hunderte oder sogar Tausende von Arrays erhalten kann, während ich tatsächlich das letzte benötige . Hier ist mein Code:

function tg() {

    $(".dot").remove();

    var p, x, y, xo, yo, agl, spd, g, t = 1, isin2, angle1, n = 0, i = 1;
    var m = [];

    p = $("#ba").position();
    xo = p.left;
    yo = p.top;

    spd = $("#spd").val();
    agl = $("#agl").val();
    g = $("#g").val();
    angle1 = formula;

    isin2 = true;

    while (isin2) {
        y = formula;
        x = formula;

        m.push([x, y]);

        //...

        t++;
        isin2 = isin(x, y);

    }
    if (isin2 == false) {
        $(".dot").last().remove();
        m.pop([x, y]);
        console.log(m);
    }
    activate(m);
}

Da kommen die Schieberegler, ich habe tatsächlich nur einen von ihnen gegeben, weil die restlichen zwei absolute Kopien sind, sie adressieren nur andere Variablen.

$(document).ready(function(){
    $("#slagl").slider({
        min:0,
        max:89,
        value:15,
        range:"min",
        slide: function(event, ui){
            $("#agl").val(ui.value); 
            tg();
        }
    });

That's the what console.log() returns for m

Wie Sie leicht sehen können, stapeln sich nur neue und neue Arrays, ohne die anderen zu reinigen. Das Ziel ist es, alle anderen redundanten Arrays, die auf Folie erstellt wurden, irgendwie zu löschen und bei jedem Aufruf der Funktion nur das letzte zu belassen.

-2
KDX2 22 Aug. 2015 im 21:31

3 Antworten

Beste Antwort

In einem privaten Gespräch mit dem OP stellten wir fest, dass die Arrays tatsächlich ordnungsgemäß generiert wurden. Das Problem liegt in activate(m);, das jedes Mal aufgerufen wird, wenn sich ein Schieberegler ändert. In activate() wird einer Schaltfläche ein Klickereignis zugewiesen, was dazu führte, dass bei jedem Update redundante Klickereignisse angehäuft wurden. Wenn also auf die Schaltfläche geklickt wird, wird der Code auch mit älteren Werten des Arrays ausgeführt.

1
Hristo 22 Aug. 2015 im 21:39

Sie sollten entweder den Schieberegler change verwenden oder eine Entprellung verwenden:

$(document).ready(function(){
  var timer;
  $("#slagl").slider({
    min:0,
    max:89,
    value:15,
    range:"min",
    slide: function(event, ui){
      $("#agl").val(ui.value);
      if(timer) {
        clearTimeout(timer);
      }
      timer = setTimeout(tg, 500);
    }
  });
});

Ändern Sie den Wert 500 in einen Wert, der für Ihren Anwendungsfall besser geeignet ist.

0
Felipe Brahm 22 Aug. 2015 im 18:56

Bitte verwenden Sie die Änderungsfunktion des Schiebereglers. Dies wird nur einmal aufgerufen, wenn der Benutzer die Handler des Schiebereglers freigibt, im Vergleich zu einem Rückruf "Folie", der bei jeder Pixelbewegung aufgerufen wird.

0
vijayP 22 Aug. 2015 im 18:48