Упорядочить график ggplot и grid.table на той же странице [дубликат]

Это старый вопрос, но следующее может быть полезно в общих терминах.

  • Во-первых, поля формы HTML ограничены текстом . Особенно это касается текстовых полей, даже если вы приложили все усилия, чтобы убедиться, что значение выглядит как число.
  • Во-вторых, JavaScript, к лучшему или худшему, перегрузил + с двумя значениями: он добавляет числа и объединяет строки. Он предпочитает конкатенацию, поэтому даже выражение, подобное 3+'4', будет рассматриваться как конкатенация.
  • В-третьих, JavaScript будет пытаться динамически изменять типы, если это возможно, и если это необходимо. Например, '2'*'3' изменит оба типа на числа, поскольку вы не можете умножить строки. Если один из них несовместим, вы получите NaN, а не номер.

Ваша проблема возникает из-за того, что данные, поступающие из формы, рассматриваются как строка, а + поэтому будет сцепляться, а не добавлять.

При чтении предположительно числовых данных из формы вы всегда должны проталкивать ее через parseInt() или parseFloat(), в зависимости от того, хотите ли вы целое или десятичное число.

Обратите внимание, что ни одна из функций по-настоящему не преобразует строку в число. Вместо этого он будет анализировать строку слева направо, пока она не вернется к недопустимому числовому символу или к концу и не конвертирует принятое. В случае parseFloat, который включает одну десятичную точку, но не две.

Все, что после действительного числа просто игнорируется. Там, где они терпят неудачу, если строка даже не начинается с числа. Затем вы получите NaN.

Хорошая техника общего назначения чисел из форм выглядит примерно так:

var data=parseInt(form['data'].value);  //  or parseFloat

Если вы готовы объединить недопустимую строку в 0, вы можете использовать:

var data=parseInt(form['data'].value) || 0;
0
задан Sean Kaplan 22 May 2012 в 21:20
поделиться