Foros del Web » Programando para Internet » Javascript »

Pasando valores a funciones

Estas en el tema de Pasando valores a funciones en el foro de Javascript en Foros del Web. Tengo que pasar la siguiente cadena a una función de JavaScript : Código HTML: sdg sdg "sdg" <br /> <br /> sdg 'gsgd' "sdg" <br ...
  #1 (permalink)  
Antiguo 09/03/2005, 12:52
 
Fecha de Ingreso: febrero-2005
Mensajes: 670
Antigüedad: 19 años, 2 meses
Puntos: 0
Pasando valores a funciones

Tengo que pasar la siguiente cadena a una función de JavaScript:
Código HTML:
sdg sdg "sdg"<br />
<br />
sdg 'gsgd' "sdg"<br />
<br />
sdg"
El problema es que al llamar a la función no funciona, supongo que por las comillas. Intenté escaparlas pero sigue dándose el error.

¿Alguna idea de cómo solucionarlo?
Gracias
Fede
__________________
Federico H. García
Desarrollo Web
www.federicog.com.ar
  #2 (permalink)  
Antiguo 09/03/2005, 15:27
 
Fecha de Ingreso: agosto-2004
Mensajes: 157
Antigüedad: 19 años, 8 meses
Puntos: 5
Hola thunder.scripts

Prueba a ver si te sirve.

<html>
<head>
<title>Untitled</title>
</head>
<script language=JavaScript type=text/javascript>
<!--
function test_(s){
// con las etiqueta HTML
alert(s.innerHTML)
// para extraer solo el texto contenido entre div
// eliminando las etiquetas HTML
if(s.innerText){
alert(s.innerText)
}
else if(s.textContent){
alert(s.textContent)
}
}

//-->
</script>

<body>
<div id="texto" onclick ="test_(this)">
sdg sdg "sdg"<br />
<br />
sdg 'gsgd' "sdg"<br />
<br />
sdg"</div>


</body>
</html>

Saludos :)
  #3 (permalink)  
Antiguo 09/03/2005, 16:04
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola thunder.scripts y kepawe:

Es interesante la solución de kepawe, pero innerText solo vale en explorer...
... de todos modos... me parece que sería mejor saber como se obtiene la cadena.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #4 (permalink)  
Antiguo 09/03/2005, 17:02
 
Fecha de Ingreso: agosto-2004
Mensajes: 157
Antigüedad: 19 años, 8 meses
Puntos: 5
Hola caricatos

Tienes razón innerText creo que solo va en IE, no se si Opera lo utiliza, pero para Mozilla tienes la propiedad textContent, supongo que tambien valdra para Firefox y NS6+, no lo he probado, la verdad no estoy muy seguro.

Si Opera no soporta ninguna de las dos propiedades creo que debe de tener una equivalente.

Pero como dices lo mejor es saber como se obtiene la cadena.



Saludos :)
  #5 (permalink)  
Antiguo 10/03/2005, 15:37
 
Fecha de Ingreso: febrero-2005
Mensajes: 670
Antigüedad: 19 años, 2 meses
Puntos: 0
Gracias a los tres, pero eliminar el html no es una opción (igualmente la cadena la obtengo por medio php, así que podría eliminarlos ahí si fuera necesario).

Por ahora lo solucioné reemplazando las comillas dobles por un texto alternativo en php y volviendo a reemplazar este texto a comillas dentro de la función de js.

Por ahora funciona, pero es como medio 'atado con alambre'

Si alguno tiene una idea de lo que podría hacer se lo agradecería mucho ;)

Suerte
Fede
__________________
Federico H. García
Desarrollo Web
www.federicog.com.ar
  #6 (permalink)  
Antiguo 11/03/2005, 08:22
 
Fecha de Ingreso: agosto-2004
Mensajes: 157
Antigüedad: 19 años, 8 meses
Puntos: 5
Hola de nuevo.

Podrias poner el código, para ver como obtienes y manipulas la cadena, asi seria más solucionar el problema.

Saludos :)
  #7 (permalink)  
Antiguo 11/03/2005, 11:22
 
Fecha de Ingreso: febrero-2005
Mensajes: 670
Antigüedad: 19 años, 2 meses
Puntos: 0
Claro:
Código PHP:
//consulta a la base de datos...

while($r=mysql_fetch_assoc($d)) {
   
$texto addslashes($d[texto]);
   echo 
'<a href="pagina'.$d[id].'.htm" onclick="funcion_js(\''.$texto.'\');">Ver</a>';

Suerte
Fede
__________________
Federico H. García
Desarrollo Web
www.federicog.com.ar
  #8 (permalink)  
Antiguo 11/03/2005, 20:51
 
Fecha de Ingreso: agosto-2004
Mensajes: 157
Antigüedad: 19 años, 8 meses
Puntos: 5
Hola de nuevo.
Parece que he tenido suerte, en este caso solo podrias poner secuencias de escape en las comillas simples, ya que el codigo javascript se encuentra dentro de una etiqueta html.

Una forma de solucionar el problema seria esta:

Código PHP:
  $texto "\"comillas dobles\" 'comillas simples'";
  
$texto =  ereg_replace("\"","\u0022",$texto);
  
$texto =  ereg_replace("'","\u0027",$texto);
  echo 
'<a href="javascript:void(0)" onclick="alert(\''.$texto.'\');">Ver</a>'

Esto daria como resultado :
Código HTML:
<a href="javascript:void(0)" onclick="alert(' \u0022comillas dobles\u0022 \u0027comillas simples\u0027' )">ver</a> 

Saludos :)
  #9 (permalink)  
Antiguo 12/03/2005, 09:27
 
Fecha de Ingreso: febrero-2005
Mensajes: 670
Antigüedad: 19 años, 2 meses
Puntos: 0
Eso es lo que hice yo, pero, ¿por qué u0022?
__________________
Federico H. García
Desarrollo Web
www.federicog.com.ar
  #10 (permalink)  
Antiguo 14/03/2005, 16:43
 
Fecha de Ingreso: agosto-2004
Mensajes: 157
Antigüedad: 19 años, 8 meses
Puntos: 5
\uvalor hexadecimal es la forma de javascript de representar caracteres unicode, no estoy muy seguro pero creo que se implanto en Javascript 1.3, si es asi funcionara en IE5+ y NS6+. No tengo IE4 ni NS4 para comprobar si lo soporta, pero supongo que a estas altura nadie lo utiliza.

Al parecer cuando javascript esta dentro de una etiqueta HTML, <a href="javascript:void(0)" onclick="alert(' \u0022comillas dobles\"\u0027comillas simples\u0027' );return false;"> , html entiende las comillas dobles como final del valor del atributo y ya que HTML no entiende \u0022 como comillas dobles evitamos el problema.



Saludos :)
  #11 (permalink)  
Antiguo 15/03/2005, 12:24
 
Fecha de Ingreso: febrero-2005
Mensajes: 670
Antigüedad: 19 años, 2 meses
Puntos: 0
ah es algo parecido a lo que hice yo, nada más que \u0022 son las comillas en sí, gracias!

Igualmente, (lo pude probar en opera nada más) si uso \u0022 javascript no me los reconoce como comillas y tengo que usar str.replace para volver a convertir los \u* a comillas dobles o simples, como corresponda.

Quizás tiene algo que ver con que el contenido no lo muestro en un alert, sino dentro de un elemento HTML usando innerHTML.

Igualmente funciona perfectamente reemplazándolo a mano, así que no hay drama ;)

Mil gracias
Fede
__________________
Federico H. García
Desarrollo Web
www.federicog.com.ar
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 14:55.