Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/05/2014, 05:03
eloyucu
 
Fecha de Ingreso: octubre-2013
Ubicación: Pego Alicante
Mensajes: 25
Antigüedad: 11 años, 1 mes
Puntos: 0
Información Cuidado con las comillas en javascript

No sé si alguna vez habéis tenido este problema que os voy a presentar, pero a mi me ha estado dando la vara un rato largo. Voy a dar por hecho que todos sabemos como intercalar comillas a nivel básico, o sea (por ejemplo), si tengo que poner con javascript un div cuya clase quiero que sea operarios, haría esto:
Código Javascript:
Ver original
  1. $(this).append("<div class='operarios'");
Entonces, quizá os preguntéis: ¿cuál ha sido el problema que has tenido para haber estado casi una hora con esto?
La repuesta es mejor que la explique con un ejemplo, justamente en el que estaba trabajando. Pongo el código y después lo explico:
Código Javascript:
Ver original
  1. $(".contenedor_operarios").append("<div class='operarios' style='top: "+ (150+(indice*60)) +"px' onclick='initGeneral("+operarios_nombre[operarios_nombre.length-1]+");'></div>"
Estoy añadiendo un div a otro div contendedor, y quiero que este div hijo llame a la función initGeneral... y la variable tiene que ser un string, de este modo, si al introducir datos en el array se hace de la siguiente manera:
Código Javascript:
Ver original
  1. operarios_nombre[operarios_nombre.length] = nombre;
Parece que todo funciona... pero al clicar sobre el elemento la consola de errores de javascript escupe el siguiente error: Test in not defined. Donde Test era el nombre introducido en el array y que el evento onclick está pasando a la función... el problema es que se lo envía así Test, en crudo, en lugar de enviarle "Test". Evidentemente si definimos la variable Test en el javascript, dejaría de generar el error, pero seguiría sin funcionar evidentemente.
En el array con el que trabajo tengo unos cuantos nombres y no me acordaba que ese era uno de ellos, y daba la casualidad que siempre clicaba sobre el mismo div, además, al tener ese nombre tan expresivo pensé que podría ser una variable del sistema extraña que se había colado, o algo así.
La primera solución, al darme cuenta que Test era el nombre del array, que se me ocurrió fue poner comillas intercaladas:
Código Javascript:
Ver original
  1. $(".contenedor_operarios").append("<div class='operarios' style='top: "+ (150+(indice*60)) +"px' onclick='initGeneral('"+operarios_nombre[operarios_nombre.length-1]+"');'></div>"
Si so fijáis hay unas comillas simples antes de las dobles comillas al inicio del paso del parámetro de la función y al final. Aquí: ral('"+op y aquí th-1]+"');. Pero evidentemente al renderizar el javascript en html la solución no era la esperada:
Código HTML:
Ver original
  1. <div class="operarios" style="top: 270px" onclick="initGeneral("test_2");"></div>
A lo que al hacer clic el error era que faltaba un token } (o algo así)... Pero el tema es que la llamada a la función estaba incompleta, se estaba llamando a initGeneral(
Finalmente la solución fue jodidam.... digo, extremadamente simple. Al tiempo de introducir las variables en el array les puse directamente las comillas tal que así:
Código Javascript:
Ver original
  1. operarios_nombre[operarios_nombre.length] = '"' + nombre + '"';
Lo que no he testeado, es si esto funcionaría:
Código Javascript:
Ver original
  1. operarios_nombre[operarios_nombre.length] = "'" + nombre + "'";
Es similar, pero tiene las comillas intercaladas. En la primera forma coincidiría con el intercalado de comillas de la función append, y sobre todo de la asociación de la función initGeneral al evento onclick.
Otra cosa que me queda por saber es si existe alguna forma de "escapar" las comillas, o sea, algún caracter de escape, que presuponiendo hipotéticamente que pudiera ser el caracter /, el método append quedaría:
Código Javascript:
Ver original
  1. $(".contenedor_operarios").append("<div class='operarios' style='top: "+ (150+(indice*60)) +"px' onclick='initGeneral(/""+operarios_nombre[operarios_nombre.length-1]+"/");'></div>"

Bueno... espero que a alguien le ayude. Y a ver si alguien confirma esas dos pequeñas dudas (la del segundo método de introducción de nombres en el array con las comillas intercambiadas, y la de si existe algún tipo de carácter de escape).

MUCHAS GRACIAS.