#javascript #graph #comparison #plot
#javascript #График #сравнение #график
Вопрос:
Я пишу библиотеку построения графиков / графиков для Javascript и столкнулся с тем, что кажется огромной проблемой.
У меня есть 4 числовых ввода для определения минимальных и максимальных значений, которые будет отображать график, как в графическом калькуляторе TI-84: XMin, XMax, YMin, YMax.
<div id="window">
<input type="number" class="bound" id="minX" value="" />
<input type="number" class="bound" id="maxX" value="" />
<br />
<input type="number" class="bound" id="minY" value="" />
<input type="number" class="bound" id="maxY" value="" />
</div>
Затем у меня есть код, который захватывает эти значения и помещает их в функцию Plot.setBounds(xMin, xMax, yMin, yMax)
всякий раз, когда они изменяются:
var plot1 = new Plot();
$('#window .bound').change(function() {
var minX = $('#window #minX').val(),
maxX = $('#window #maxX').val(),
minY = $('#window #minY').val(),
maxY = $('#window #maxY').val();
console.log('modified to:', minX, maxX, minY, maxY);
plot1.setBounds(minX, maxX, minY, maxY);
plot1.draw();
});
Наконец, для Plot.setBounds(xMin, xMax, yMin, yMax)
функции у меня есть:
Plot.prototype.setBounds = function (xMin, xMax, yMin, yMax) {
if ((xMin < xMax) amp;amp; (yMin < yMax)) {
this.bounds = [[xMin, xMax], [yMin, yMax]];
} else {
console.error('Plot.setBounds(xMin, xMax, yMin, yMax) requires maximum values that are greater than the minimum values!');
console.log('received:', xMin, xMax, yMin, yMax);
}
return this;
};
Однако проблема возникает, когда xMin>= 2 и xMax>= 10, когда в консоль выдается ошибка, потому что по какой-то причине сравнение вернуло false . Вы можете проверить числа, указанные до и после ошибки (измененные и полученные), и они будут иметь одинаковые значения.
Еще один необычный факт заключается в том, что, когда вычисления для одних и тех же чисел вводятся в консоль вручную, сравнение возвращает true . Это заставляет меня поверить, что это как-то связано с вызовом функции.
Также интересно отметить, что проблема возникает только тогда, когда xMin> = 2 и xMax> = 10.
У меня есть предварительный просмотр, который вы можете протестировать здесь: http://dl.dropbox.com/u/962292/web/plot.js/static.html
Я был бы бесконечно благодарен, если бы вы могли найти решение моей ситуации.
Ответ №1:
У вас есть строки, и вам нужны числа:
var minX = $('#minX').val(),
maxX = $('#maxX').val(),
minY = $('#minY').val(),
maxY = $('#maxY').val();
это простое быстрое преобразование в число. И идентификаторы уникальны для #window
не имеет значения.
Например, "9" > "19"; // true
Комментарии:
1. Почему я не знал об этом за все время, проведенное с javascript? Почему люди используют parseInt, если вы можете просто поставить знак плюс перед строкой?
2. @Walkerneo, если вы хотите в Integer, вам нужно parseInt или использовать побитовое или с нулем,
"34.34" | 0; // 34
.3. Я заметил, что это может возвращать строку, но значения, приведенные из
console.log()
, показали иное. В любом случае, я пробовал как сознаком, так и с использованием
parseFloat()
, и, похоже, ни один из них не работает. Мне нравится ваше мышление, хотя: D4. Неважно, кажется, сейчас это работает. Должно быть, я редактировал более старую версию кода, но просматривал более новую. Глупый я = P
Ответ №2:
Другой способ получить число — с помощью parseInt() .