2017-03-06 5 views
0

ich meine Schieber wie folgt initialisieren:jQuery UI Slider falsch ui Werte

var min = 0.1; 
    var max = 20; 
    var low = 0.1; 
    var high = 20; 
    var step = 0.1; 

    $(this).slider({ 
     range: true, 
     min: min, // 0.1 
     max: max, // 20 
     values: [ low, high ], // 0.1 | 20 
     step: step, // 0.1 
     animate: "slow", 
     slide: function(event, ui) { ... } 

Welche perfeclty arbeitete, außer wenn mein Wert max/hoch ist 20. In diesem Fall innerhalb der slide function ich den Wert bekommen 19,9 für ui.values[1]. Wie ich verhindern, dass Benutzer müssen den zweiten Griff bewegt ich war wie diese Überprüfung:

if (ui.values[1] != high){ 
     return false; 
    } 

Jetzt, wo 20 bis 19,9 Benutzer nicht gleich sind nicht in der Lage eine der Griffe zu bewegen. Irgendwelche Ideen?

+0

Mögliche Duplikate von [Ist Fließkomma-Mathematik gebrochen?] (Http://stackoverflow.com/questions/588004/is-floating-point-math-broken) – CBroe

+0

Nicht sicher, ob das passt. Obwohl ich floats analysiere (min, max, low, high), sind diese Werte ** korrekt, wenn 'alert() 'verwendet wird. Es sind nur die ui.values ​​[1], was falsch ist, kann ich überhaupt nicht beeinflussen? – 4ndro1d

+0

Die Verwendung von 20 direkt ändert nichts, siehe meine bearbeitete Frage (variable init) – 4ndro1d

Antwort

1

Das Problem in Gleitkommazahlen sein kann. Sie sollten also die Werte multipliziert mit 10 verwenden und annehmen, dass 1 für 0,1 steht, 200 für 20 und so weiter. Hoffe es wird helfen.

1

Das Problem, das Sie haben, ist, dass Sie init min by 0.1 hit ist ein float-Wert. Wenn Sie mit 0 starten, wird es funktionieren. Und auch ich glaube, Sie dies stattdessen if (ui.values[1] == high) überprüfen sollten

var min = 0; 
 
    var max = 20; 
 
    var low = 0.1; 
 
    var high = 20; 
 
    var step = 0.1; 
 

 
    $("#slider").slider({ 
 
    range: true, 
 
    min: min, // 0.1 
 
    max: max, // 20 
 
    values: [low, high], // 0.1 | 20 
 
    step: step, // 0.1 
 
    animate: "slow", 
 
    slide: function(event, ui) { 
 
     console.log(ui.values) 
 
     if (ui.values[1] == high) { 
 
     return false; 
 
     } 
 

 
    } 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script> 
 
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.css"> 
 

 
<div id="slider"></div>

+0

hinzugefügt Das Problem ist, dass ich Float-Werte benötigen. Und es scheint, dass sie Probleme verursachen. Nur gedacht, dass es viele Schwimmer gibt, die falsch berechnet werden – 4ndro1d

+0

Und ja, Sie scheinen richtig zu sein (zumindest für die Zahlen, die ich ausprobiert habe). Die 0 hilft. Problem ist, dass der Mindestwert zwischen allen positiven Gleitkommazahlen bis zu 1000 variieren muss. – 4ndro1d

+0

Aber brauchst du einen Gleitkommawert als Initialisierungswert? – Zorken17