var x = e.pageX;
var myX = $(this).html();
var difference = myX - x;
var ex = myX + difference;

Todo funciona hasta la última fila. No hace una adición, reúne las variables en una cadena. Si myX es 10 y la diferencia es 20, será 1020 cuando quiera que sea 30.

¿Cómo puedo resolver esto?

6
Daniel 10 ago. 2011 a las 18:36

4 respuestas

La mejor respuesta

Puede forzar que las variables sean enteras usando algo como esto:

var ex = parseInt(myX, 10) + parseInt(difference, 10);

Esto sucede porque sus variables se consideran cadenas y el uso del operador + en cadenas concatena y luego se juntan en lugar de agregar sus valores numéricos.

4
MaxiWheat 10 ago. 2011 a las 14:38

Este es un problema común al intentar agregar un número a una cadena en Javascript. Creo que fue un descuido en el diseño de un lenguaje dinámico usar el mismo operador para la suma y la concatenación de cadenas.

Normalmente uso este truco para evitarlo:

var ex = myx - 0 + difference

Porque restar algo de una cadena lo convertirá en un número.

Como Felix señaló en los comentarios a continuación, puede usar el operador unario + para convertir una cadena en un número, como este:

var ex = +myx + difference
3
Peter Olson 10 ago. 2011 a las 18:31

Un signo negativo obligará a las variables a analizarse como int, pero el plus simplemente funcionará como concatenación e incluso obligará al int a formar una cadena.

0
Exelian 10 ago. 2011 a las 14:40

Esto se debe a que myX es una cadena y está concatenando los números en una nueva cadena.

Lo que necesita es cambiar myX a number.

Use parseInt para hacer esto.

parseInt(myX, 10)

1
Jason Gennaro 10 ago. 2011 a las 14:37