Foros del Web » Programando para Internet » Javascript »

Cuidado con las comillas en javascript

Estas en el tema de Cuidado con las comillas en javascript en el foro de Javascript en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 13/05/2014, 05:03
 
Fecha de Ingreso: octubre-2013
Ubicación: Pego Alicante
Mensajes: 25
Antigüedad: 11 años, 2 meses
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.
  #2 (permalink)  
Antiguo 13/05/2014, 06:55
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 8 meses
Puntos: 292
Respuesta: Cuidado con las comillas en javascript

Escapas con barra (\), pero no puedes escapar variables como en PHP por ejemplo

Código Javascript:
Ver original
  1. document.write('Hablaremos sobre el lenguaje de marcado \'HTML\' <br/>');
__________________
Salu2!

Última edición por Italico76; 13/05/2014 a las 07:15
  #3 (permalink)  
Antiguo 13/05/2014, 07:16
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 11 años, 3 meses
Puntos: 578
Respuesta: Cuidado con las comillas en javascript

En JavaScript al igual que otros lenguajes existe el escape mediante backslash \'.
  #4 (permalink)  
Antiguo 13/05/2014, 07:18
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 8 meses
Puntos: 292
Respuesta: Cuidado con las comillas en javascript

Cita:
Iniciado por PHPeros Ver Mensaje
En JavaScript al igual que otros lenguajes existe el escape mediante backslash \'.
Si pero funciona distino...lamentablemente el uso de la barra no es general, asi no puedes escapar tags mediante el uso de la barra sino que se vale del ampersand (&) para > y < etc
__________________
Salu2!
  #5 (permalink)  
Antiguo 13/05/2014, 07:59
 
Fecha de Ingreso: marzo-2011
Ubicación: Caracas
Mensajes: 389
Antigüedad: 13 años, 9 meses
Puntos: 16
Respuesta: Cuidado con las comillas en javascript

has probado escapar las comillas con backslash?
Las comillas generales del html las escapas con backslash y solo deja simples las del parametro de la funcion initGeneral.

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>"


En javascript funciona asi pues yo lo he usado.
__________________
Lo imposible es lo posible visto por los ojos de un incapaz.
Si te sirve la respuesta. dale + al karma.
Saludos
  #6 (permalink)  
Antiguo 13/05/2014, 14:26
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 4 meses
Puntos: 2237
Respuesta: Cuidado con las comillas en javascript

Si estás usando jquery, no veo la necesidad de concatenar todo eso en una línea; siendo tan fácil:

1- Creas un nuevo elemento y asignas id, estilos, onclick, hasta contenido html
2- Lo agregas al contenedor

Revisa la primera respuesta en: http://stackoverflow.com/questions/1...ment-in-jquery
__________________
- León, Guanajuato
- GV-Foto
  #7 (permalink)  
Antiguo 16/05/2014, 21:47
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: Cuidado con las comillas en javascript

Además de la forma que menciona Triby para asignar propiedades a un elemento con jQuery, también puedes hacerlo con JS nativo.

Código Javascript:
Ver original
  1. var input = document.createElement("input"),
  2.     fn = function(){
  3.         alert("Estás escribiendo");
  4.     },
  5.     definirProp = function(elem, prop){
  6.         for (var p in prop)
  7.             elem[p] = prop[p];
  8.         return elem;
  9.     },
  10.     invocar = new definirProp(input, {
  11.         type: "text",
  12.         id: "ejemplo",
  13.         className: "classEjemplo",
  14.         value: "Valor de ejemplo",
  15.         onkeypress: fn
  16.     });
  17.  
  18. document.body.appendChild(invocar);

De esta forma, creo un <input>, al cual le asigno propiedades y valores a través de una función. Para esto, la función recibe dos parámetros: el elemento y un objeto literal con las propiedades y valores que deseo asignar. Como extra, creé una función de nombre fn para asignarla al evento onkeypress del [inline]<input>[/input]. En la función definirProp, itero sobre el objeto literal, asignando cada propiedad al [inline]<input>[/input] y a estos, los valores respectivos.

Incluso podrías hacer crecer más esta función y darle la posibilidad al usuario de crear el elemento que quiera.

Código Javascript:
Ver original
  1. var obj = prompt("Ingrese el elemento a crear"),
  2.     fn = function(){
  3.         alert("Estás escribiendo");
  4.     },
  5.     definirProp = function(elem, prop){
  6.         element = document.createElement(elem);
  7.         for (var p in prop)
  8.             element[p] = prop[p];
  9.         return element;
  10.     },
  11.     invocar = new definirProp(obj, {
  12.         type: "text",
  13.         id: "ejemplo",
  14.         className: "classEjemplo",
  15.         value: "Valor de ejemplo",
  16.         onkeypress: fn
  17.     });
  18.  
  19. document.body.appendChild(invocar);

Ya luego sería cuestión de agregar validaciones para que el nombre del elemento a crear sea válido.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Etiquetas: comillas, cuidado, funcion, html, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:01.