Código Javascript:
Entonces, quizá os preguntéis: ¿cuál ha sido el problema que has tenido para haber estado casi una hora con esto?Ver original
$(this).append("<div class='operarios'");
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:
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:Ver original
$(".contenedor_operarios").append("<div class='operarios' style='top: "+ (150+(indice*60)) +"px' onclick='initGeneral("+operarios_nombre[operarios_nombre.length-1]+");'></div>"
Código Javascript:
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.Ver original
operarios_nombre[operarios_nombre.length] = nombre;
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:
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:Ver original
$(".contenedor_operarios").append("<div class='operarios' style='top: "+ (150+(indice*60)) +"px' onclick='initGeneral('"+operarios_nombre[operarios_nombre.length-1]+"');'></div>"
Código HTML:
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(Ver original
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:
Lo que no he testeado, es si esto funcionaría:Ver original
operarios_nombre[operarios_nombre.length] = '"' + nombre + '"';
Código Javascript:
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. Ver original
operarios_nombre[operarios_nombre.length] = "'" + nombre + "'";
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
$(".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.