image
Inicio » Foros » JavaScript

JavaScript

Pasar array en llamada

Volver al foro | Responder | Añadir nuevo tema


De: Enrique
Fecha: 20/11/2009
Mensaje:

Buenos dias a todos
Pretendo desde el cuerpo de un php, hacer una llamada a una funcion JavaScript que tengo declarada en la encabezado de la página.

El problema lo tengo en que en parte de los parametros que pretendo pasar algunos tiene espacios en blanco.

Ej.
====
<script language="javascript">
function Crear_Caso(titulo, grupoasignado, contenido, evento){
formulario.elements["contents"].value=grupoasignado;
return false;
}
</script>

<?php
echo "<tr><td><a href=\"\" onClick=Crear_Caso(\"".$data["enlace"]."\",\"".$data["contents2"]."\",\"".$data["assign_group"]."\",event)>".$data["titulo"]."</a></td></tr>";
?>

En este caso se pasan como variables 3 elementos
1.)- \"".$data["enlace"]."\"
2.)- \"".$data["contents2"]."\"
3.)- \"".$data["assign_group"]."
El segundo de los parametros que se pasan es el que puede contener espacios en blanco.

Querria saber si pueden indicarme como tendria que hacer para como unico parametro que pase es el array $data en la funcion php, y posteriormente como usarla en la parte de JAva Script.


Un saludo y muchas gracias.


Quizás le interese
De: jbosch(vosk)
Util para: 0 personas

Fecha: 26/11/2009
Mensaje:

no puedes hacerlo con la facilidad que esperas, ya que los arrays javascript no estan vinculados con los de php, por lo que si quieres convertir un array php a array javascript tendras que volcarlo sobre el script, y una vez lo tengas declarado en javascript podras enviarlo como tal a cualquier funcion de ese lenguaje.

de todas formas el problema con las comillas lo tienes porque no declaras la accion javascript del evento dentro de comillas, con lo que das a entender al navegador que con el primer espacio finaliza la instruccion; ten en cuenta que las siguientes instrucciones son interpretadas de diferente forma aunqué parezcan lo mismo:

onClick=A("a b");
onClick="A(\"a b\");"

y esto es precisamente lo que te esta sucediendo. puedes corregirlo añadiendo las comillas para la accion del evento:

echo "<a href=\"#\" onClick=\"Crear_Caso('".$data["enlace"]."','".$data["contents2"]."','".$data["assign_group"]."',event);\">".$data["titulo"]."</a>";

ten en cuenta que al usar comillas dobles para la accion, los valores de los argumentos textuales tendras que llevar comillas simples o comillas dobles comentadas (si no puedes comentarlas en una sola instruccion php puedes hacerlo en varias).

otra cosa, cuando indicas un enlace con href, al menos en mi navegador, va a cargar la pagina a la que apunta el anlace, o por defecto va a recargar la misma pagina. para elementos del form que no sean type=password no habrá problema, pero no veo que sea necesario recargar el documento solo para añadir un valor a un campo de formulario. puedes indicar el href del enlace como # para que busque dentro del documento el anclaje que será por defecto al inicio (sin recargar el documento), pero al ser un metodo GET tambien te saldrá el anclaje en la direccion. otra forma es eliminar el href y aplicarle algo de css para que parezca un enlace, y con el evento click ya lo tendras solucionado.

por lo de recibir los argumentos en la funcion como si de un array se tratara, supongo que ahora que ya has solucionado lo de los espacios te será igual, pero algo se puede hacer: aunquñe no puedas enviar directamente el array php como argumento de la funcion javascript, si que puedes recogerlo como si fuera un array (una vez lo hayas volcado para la llamada); esto puedes hacerlo con el valor 'arguments' que es aplicable a todas las funciones, y que consiste en un array que contiene todos los argumentos enviados a la funcion:

function Crear_Caso(){
formulario.elements["contents"].value=arguments[1];
}

ten en cuenta que los arrays de javascript no pueden usarse con asignaciones tal como haces en php, sino que tienes que usarlos con inidices. si eshas un vistazo a tu php, cuando creas el enlace envias los argumentos por este orden:

enlace,contents2,assign_group,event

pero en la funcion los recoges deesta otra forma:

titulo,grupoasignado,contenido,evento

no se como tienes organizados los datos, pero 'assign_group' me parece que tendria que estar vinculado con 'grupoasignado', y 'contents2' con 'contenido'; si es así tienes los nombres de los argumentos en la funcion declarados al reves, o al menos eso es lo que me parece.

jbosch(vosk)



De: Enrique
Util para: 0 personas

Fecha: 02/12/2009
Mensaje:

La solucion funciona como anillo al dedo.

En cuanto a como estan relacionados los parametros pasados simplemente estaba probando, aun no están bien asociados.

Una vez que funciona ya solo es cuestión de hacerlo entero de manera correcta, pero eso es labor mia.

Muchas gracias.



Volver al foro | Responder | Añadir nuevo tema

Quizás le interese:

WebEstilo.com no se hace responsable de las opiniones que los usuarios puedan verter en cualquiera de los foros existentes.

Si te solucionó el problema pulsa en G+1


Gracias!






Comparte



Última modificación:31 de Agosto de 2017. Spain - Espa�a.
© 1998-2004 por . Todos los derechos reservados.