Foros del Web » Programando para Internet » Javascript »

Ayuda para pasar esto a una función...

Estas en el tema de Ayuda para pasar esto a una función... en el foro de Javascript en Foros del Web. Hola a todos, cómo van??? Buscando acá en los FAQ's, encontré lo que estaba buscando, un contador de palabras ... Cómo algunos saben mis conocimientos ...
  #1 (permalink)  
Antiguo 05/10/2007, 16:47
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
De acuerdo Ayuda para pasar esto a una función...

Hola a todos, cómo van???

Buscando acá en los FAQ's, encontré lo que estaba buscando, un contador de palabras ...

Cómo algunos saben mis conocimientos en javascript son casi nulos , y me gustaría poder convertir esto en un función que sea llamada desde un archivo aparte, una especie de include, entonces no se si es posible en que me guien en como hacerlo, esto es como lo tengo actualmente:

Código HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <script language="JavaScript">
   function calcula(){
    var sTxt = document.frm.txt.value;
    var sTx2 = "";
    var sSep = document.frm.sep.value;
    var iRes = 0;
    var bPalabra = false;
    for (var j = 0; j < sTxt.length; j++){
     if (sSep.indexOf(sTxt.charAt(j)) != -1){
      if (bPalabra) sTx2 += " ";
      bPalabra = false;
     } else {
      bPalabra = true;
      sTx2 += sTxt.charAt(j);
     }
    }
    if (sTx2.charAt(sTx2.length - 1) != " ") sTx2 += " ";
    for (var j = 0; j < sTx2.length; j++)
     if (sTx2.charAt(j) == " ") iRes++;
    if (sTx2.length == 1) iRes = 0;
   //alert("Número de palabras: " + String(iRes));
   document.frm.contador.value=+ String(iRes);
   }
  </script>
 </head>
 <body>
  <form name="frm">
   Texto:<br>
   <textarea name="txt" rows="5" cols="80" onKeyDown="calcula()"></textarea><br><br>
   Separadores:
   <input type="text" name="sep" value=" ,.;:">
   <input name="contador" type="text" id="contador" size="4" maxlength="4">
   <br>
   <br>
   
  </form>
 </body>
</html> 
De esta manera funciona perfectamente pero la idea serìa simplemente llamar la funciòn desde de un archivo y que no aparezca el chorrero de toda la funciòn en el head...

Hey muchas gracias de antemano por la ayuda que me puedan brindar!!!
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #2 (permalink)  
Antiguo 06/10/2007, 08:52
 
Fecha de Ingreso: enero-2007
Mensajes: 51
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: Ayuda para pasar esto a una función...

Lo que tienes que hacer es colocar este código

Código HTML:
<script type="text/javascript" src="nombre_archivo.js"></script> 

Y dentro de ese archivo lo colocas así
Código:
   function calcula(){
    var sTxt = document.frm.txt.value;
    var sTx2 = "";
    var sSep = document.frm.sep.value;
    var iRes = 0;
    var bPalabra = false;
    for (var j = 0; j < sTxt.length; j++){
     if (sSep.indexOf(sTxt.charAt(j)) != -1){
      if (bPalabra) sTx2 += " ";
      bPalabra = false;
     } else {
      bPalabra = true;
      sTx2 += sTxt.charAt(j);
     }
    }
    if (sTx2.charAt(sTx2.length - 1) != " ") sTx2 += " ";
    for (var j = 0; j < sTx2.length; j++)
     if (sTx2.charAt(j) == " ") iRes++;
    if (sTx2.length == 1) iRes = 0;
   //alert("Número de palabras: " + String(iRes));
   document.frm.contador.value=+ String(iRes);
   }
  #3 (permalink)  
Antiguo 06/10/2007, 09:57
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Exclamación Re: Ayuda para pasar esto a una función...

Hola escudo40!! Gracias por tu respuesta pero lamentablemente no funciona... sé que tengo que hacer ciertos cambios a la funciòn para cuando es llamada desde un archivo externo... pero los cambios que hice no son suficientes, acá les dejo lo que he hecho hasta el momento:

El archivo que tiene la funciòn javascript se llama, funciones_varias.js:
Código:
function calcula(obj)
{
    var sTxt = obj.keywords.value;
    var sTx2 = "";
    var sSep = obj.sep.value;
    var iRes = 0;
    var bPalabra = false;
    for (var j = 0; j < sTxt.length; j++)
	{
    	if (sSep.indexOf(sTxt.charAt(j)) != -1)
		{
    		if (bPalabra) sTx2 += " ";
    		bPalabra = false;
    	} 
		else 
		{
      		bPalabra = true;
      		sTx2 += sTxt.charAt(j);
     	}
    }
    if (sTx2.charAt(sTx2.length - 1) != " ") sTx2 += " ";
    for (var j = 0; j < sTx2.length; j++)
    	if (sTx2.charAt(j) == " ") iRes++;
    	if (sTx2.length == 1) iRes = 0;   
   obj.contador.value=+ String(iRes);
}
Y el archivo donde lo llamo y tengo el form:
Código HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Administrador Mi Laberinto</title>
<script src="js/funciones_varias.js" type="text/javascript"></script>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
	<form action="archivos.php" method="post" name="form">		
		<textarea name="keywords" cols="40" rows="4" onKeyDown="calcula(this.form)"></textarea><br />
		<input type="hidden" name="sep" value=" ,.;:">
		<input name="contador" size="4" maxlength="4" type="text" readonly="readonly">		
	</form> 
 </body>
</html> 
Esta es la manera como lo estoy intentando hacer... no funciona... Alguna sugerencia de que deba cambiar o que deba hacer???

Gracias de antemano!!!
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #4 (permalink)  
Antiguo 06/10/2007, 10:12
 
Fecha de Ingreso: enero-2007
Mensajes: 51
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: Ayuda para pasar esto a una función...

a mi me funciona perfecto con este codigo

Código HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
<script src="js/funciones_varias.js" type="text/javascript"></script>
 </head>
 <body>
  <form name="frm">
   Texto:<br>
   <textarea name="txt" rows="5" cols="80" onKeyDown="calcula()"></textarea><br><br>
   Separadores:
   <input type="text" name="sep" value=" ,.;:">
   <input name="contador" type="text" id="contador" size="4" maxlength="4">
   <br>
   <br>
   
  </form>
 </body>
</html> 
el archivo de javascript se encuentra en la carpeta "js" y el nombre del archivo es "funciones_varias.js"
Código:
   function calcula(){
    var sTxt = document.frm.txt.value;
    var sTx2 = "";
    var sSep = document.frm.sep.value;
    var iRes = 0;
    var bPalabra = false;
    for (var j = 0; j < sTxt.length; j++){
     if (sSep.indexOf(sTxt.charAt(j)) != -1){
      if (bPalabra) sTx2 += " ";
      bPalabra = false;
     } else {
      bPalabra = true;
      sTx2 += sTxt.charAt(j);
     }
    }
    if (sTx2.charAt(sTx2.length - 1) != " ") sTx2 += " ";
    for (var j = 0; j < sTx2.length; j++)
     if (sTx2.charAt(j) == " ") iRes++;
    if (sTx2.length == 1) iRes = 0;
   //alert("Número de palabras: " + String(iRes));
   document.frm.contador.value=+ String(iRes);
   }
  #5 (permalink)  
Antiguo 07/10/2007, 17:18
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Pregunta Re: Ayuda para pasar esto a una función...

Hola de nuevo escudo40!!!!

Tenías razón... funciona a la perfección... Grcias por el dato!! y disculpas...

El inconveniente que veo con esto es que siempre me tocaría llamar a todos los objetos de esta manera... no hay alguna forma escudo40 para que sea mas global?? osea que no importe como se llamen los objetos... por ejemplo pasarle el parametro this.form y que retorne un valor?? Mas arriba encuentras como lo pretendía hacer, no sé si se pueda....

Saludos y de nuevo gracias!!!
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com

Última edición por Carxl; 07/10/2007 a las 21:52
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 18:04.