Foros del Web » Programando para Internet » Javascript »

Problema al obtener valor de un array

Estas en el tema de Problema al obtener valor de un array en el foro de Javascript en Foros del Web. Me interesa que: dado 2 campos de texto, y un boton. El primer campo de texto contiene la ID del array y lo que hace ...
  #1 (permalink)  
Antiguo 14/08/2007, 03:30
Avatar de TCL_ZIP  
Fecha de Ingreso: noviembre-2003
Ubicación: Esporles, Mallorca, España
Mensajes: 690
Antigüedad: 20 años, 5 meses
Puntos: 4
Problema al obtener valor de un array

Me interesa que: dado 2 campos de texto, y un boton.
El primer campo de texto contiene la ID del array y lo que hace el boton es que al hacer click, se ponga en el segundo campo de texto el contenido de esa posicion de array.

Lo he intentado programando yo y scripts ya echos, me gustaria que alguien provara de hacerme uno haver si me funciona :S

gracias por adelantado
  #2 (permalink)  
Antiguo 14/08/2007, 03:47
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Re: Problema al obtener valor de un array

Hola:

Sería más o menos así:

<button type="button" onclick="campo2.value = tu_array[campo1.value]" >

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 14/08/2007, 03:53
Avatar de TCL_ZIP  
Fecha de Ingreso: noviembre-2003
Ubicación: Esporles, Mallorca, España
Mensajes: 690
Antigüedad: 20 años, 5 meses
Puntos: 4
Re: Problema al obtener valor de un array

Vale, disculpen pero me acabo de dar cuenta de que el campo de texto no coincide con el indice del array, sino con uno de sus contenidos.

Lo que yo tengo es una consulta de base de datos que me obtiene 2 campos: una id y una descripción, lo que quiero es que mi cliente escriba en el primer campo la id y al pulsar sobre el botón se ponga la descripción en el segundo campo de texto.

Tenia pensado hacerlo con un case, de echo ice otro post con el codigo, aqui esta:
http://www.forosdelweb.com/f13/problema-definir-funcion-usar-desde-boton-511120/

Espero me puedas ayudar
  #4 (permalink)  
Antiguo 14/08/2007, 19:59
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Problema al obtener valor de un array

Cita:
Iniciado por caricatos
<button type="button" onclick="campo2.value = tu_array[campo1.value]" >
<button type="button" /> ??
Aunque no te diré que no se pueda -ni se deba- hacer. <button>


Cita:
Iniciado por TCL_ZIP Ver Mensaje
Vale, disculpen pero me acabo de dar cuenta de que el campo de texto no coincide con el indice del array, sino con uno de sus contenidos.
Bueno, sería algo parecido a lo que te ha comentado caricatos, sólo que tenemos que relacionar campo1.value con el index de tu array. Entonces podemos hacer una función para buscar en el array, que lo recorra elemento a elemento, y cuando encontremos lo que buscamos, devolvemos ese index.

Quedaría entonces:
Código PHP:
<button type="button" onclick="campo2.value = tu_array[ buscar(tu_array, campo1.value) ]" >hola </button


Un saludo.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #5 (permalink)  
Antiguo 14/08/2007, 20:16
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Re: Problema al obtener valor de un array

Cita:
Iniciado por derkenuke Ver Mensaje
<button type="button" /> ??
Aunque no te diré que no se pueda -ni se deba- hacer. <button>

...
No te entiendo ... el tag button tiene tres posibles tipos (button, reset y submit), y aunque la w3.org dice que por defecto son tipo submit, explorer como siempre hace lo que le dá la gana, y por defecto son tipo button, por eso mi consejo es siempre ponerle el atributo type.

Particularmente prefiero usar el tag button como boton, y el resto de controles del formulario que sean input (claro está que no considero los selects).

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #6 (permalink)  
Antiguo 14/08/2007, 20:51
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Problema al obtener valor de un array

Sí, te decía eso porque normalmente siempre se ha usado el <input>, aunque estuve leyéndo el otro día que tiene mucha más lógica utilizar <button> para un botón, ya que input significa entrada de datos.

Sólo decía que <button type="button"> queda muy redundante y que la especificación dice perfectamente que se puede usar sin ningún problema.


Saludos.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #7 (permalink)  
Antiguo 15/08/2007, 08:46
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Re: Problema al obtener valor de un array

¡Je, je!

Al menos en este foro yo lo fomento, justamente por su razón semántica (no me extrañaría que lo que leíste lo hubiera puesto yo en algún otro mensaje )

... aunque también semánticamente un botón puede servir para entrar datos... un ejemplo sencillo es en cualquier formulario cuando ponene más de un botón, por ejemplo borrar y actualizar, ambos con name=submit (aunque yo prefiero nombres en español, por ejemplo name=enviar)... en la recogida de datos se puede chequear el valor de la variable submit (o enviar) para procesar el formulario:

if ($_POST["enviar"] == "borrar")
$consulta = "delete from $tabla where... ";
else
$consulta = "update $tabla...";

Creo que semánticamente esos botones que son a la vez una entrada para evaluar son más propios los inputs del tipo de botón adecuado... supongo que esta valoración semántica solo tiene sentido en los botones tipo submit (tema abierto al debate)...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #8 (permalink)  
Antiguo 16/08/2007, 03:16
Avatar de TCL_ZIP  
Fecha de Ingreso: noviembre-2003
Ubicación: Esporles, Mallorca, España
Mensajes: 690
Antigüedad: 20 años, 5 meses
Puntos: 4
Re: Problema al obtener valor de un array

Cita:
Iniciado por derkenuke Ver Mensaje
Entonces podemos hacer una función para buscar en el array, que lo recorra elemento a elemento, y cuando encontremos lo que buscamos, devolvemos ese index.
Aqui reconozco me has pillado, donde puedo encontrar un buen algoritmo de busqueda? el tamaño del array es muy grande, cerca de 35.000 registros. gracias por adelantado
  #9 (permalink)  
Antiguo 16/08/2007, 05:14
Avatar de TCL_ZIP  
Fecha de Ingreso: noviembre-2003
Ubicación: Esporles, Mallorca, España
Mensajes: 690
Antigüedad: 20 años, 5 meses
Puntos: 4
Re: Problema al obtener valor de un array

bueno he avanzado bastante, ahora el codigo que tengo es el siguiente:
entre las etiquetas head:
el script de busqueda
Código:
<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript">
<!-- 
function buscarItem(lista, valor){
var ind, pos;
for(ind=0; ind<lista.length; ind++)
   {
    if (lista[ind][0] == valor)
      break;
    }
pos = (ind < lista.length)? ind : -1;
return (pos);
} 
// -->
</SCRIPT>
el script de definicion del array :
Código:
<script LANGUAGE="JavaScript"> 
<!-- 
var componentes_array = new Array(<%
While ((Repeat1__numRows <> 0) AND (NOT componentes.EOF))

%>new Array("<%=(Replace(" "&componentes.Fields.Item("CODART").Value, chr(34), "'") )%>", "<%=(Replace(" "&componentes.Fields.Item("DESCRIP").Value, chr(34), "'") )%>"),
<% 
  Repeat1__index=Repeat1__index+1
  Repeat1__numRows=Repeat1__numRows-1
  componentes.MoveNext()
Wend
%>new Array(' ', 'No se encontro'));
// -->
</script>

entre las etiquetas body

y por ultimo el boton que me ejecuta la funcion, tal y como vosotros me habeis comentado:
Código:
<button type="button" onclick="COMPOPRODDESC.value = componentes_array[buscarItem(componentes_array, COMPOPRODID.value)]" >obtener descripción </button>
No me da ningun error de javascript, solamente me escribe en el campo compoproddesc el valor: undefined


que creen que puede ser?
  #10 (permalink)  
Antiguo 16/08/2007, 08:04
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Problema al obtener valor de un array

Creo que hay que comprobar mejor paso a paso las funciones que creas, para asegurarte de que no tienen error alguno. A tu función buscarItem() le sobra un [0] que le has puesto dentro del if. Creo que así funcionaría todo bien.
Código PHP:
<SCRIPT TYPE="text/javascript">
<!-- 
function 
buscarItem(listavalor){
var 
indpos;
for(
ind=0ind<lista.lengthind++)
   {
    if (
lista[ind] == valor)
      break;
    }
pos = (ind lista.length)? ind : -1;
return (
pos);

// -->
</SCRIPT> 

Un saludo.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #11 (permalink)  
Antiguo 16/08/2007, 10:29
Avatar de TCL_ZIP  
Fecha de Ingreso: noviembre-2003
Ubicación: Esporles, Mallorca, España
Mensajes: 690
Antigüedad: 20 años, 5 meses
Puntos: 4
Re: Problema al obtener valor de un array

Cita:
Iniciado por derkenuke Ver Mensaje
Creo que hay que comprobar mejor paso a paso las funciones que creas, para asegurarte de que no tienen error alguno. A tu función buscarItem() le sobra un [0] que le has puesto dentro del if. Creo que así funcionaría todo bien.
Código PHP:
<SCRIPT TYPE="text/javascript">
<!-- 
function 
buscarItem(listavalor){
var 
indpos;
for(
ind=0ind<lista.lengthind++)
   {
    if (
lista[ind] == valor)
      break;
    }
pos = (ind lista.length)? ind : -1;
return (
pos);

// -->
</SCRIPT> 

Un saludo.
El problema es que si te fijas cada posicion de mi array tiene 2 posiciones, una con el codigo de busqueda, y la otra con la descripción a la que corresponde
  #12 (permalink)  
Antiguo 16/08/2007, 10:49
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Re: Problema al obtener valor de un array

Hola:

Con tantos registros una búsqueda puede ser larga, pero si se trata de 2 valores, tal vez te interese más crear un array asociativo, poniendo valor como indice del array, entonces la búsqueda sería mucho más directa:

return lista[valor]... si no existiese devolvería undefined y de existir no habría que hacer absolutamente nada...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #13 (permalink)  
Antiguo 16/08/2007, 13:01
Avatar de TCL_ZIP  
Fecha de Ingreso: noviembre-2003
Ubicación: Esporles, Mallorca, España
Mensajes: 690
Antigüedad: 20 años, 5 meses
Puntos: 4
Re: Problema al obtener valor de un array

ok, mmmm y pero el codigo tambien contiene caracteres, eso se podria hacer? como se declararia en el caso de que se pudiera declarar como indice una cadena de caracteres?
  #14 (permalink)  
Antiguo 16/08/2007, 14:41
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Problema al obtener valor de un array

No hay ningún problema en hacer:
Código PHP:
var miArray = new Array();
miArray["frutas"] = "peras, plátanos y limones";
miArray["sesenta"] = 60;
miArray["dospordos"] = 4
miArray
["2x2"] = 4;
miArray["una frase larga"] = "otra frase larga";
miArray[0] = "hola";
miArray[1] = "que tal";
miArray[2] = "estamos";

document.writemiArray["frutas"]  +"<br/>");
document.writemiArray["sesenta"]  +"<br/>");
document.writemiArray["dospordos"] +"<br/>" );
document.writemiArray["2x2"]  +"<br/>");
document.writemiArray["una frase larga"]  +"<br/>");
document.writemiArray["noexisto"]  +"<br/>");
document.write("--------------------------<br/>");

for(var 
i in miArray) {
    
document.write(i+" --> "+miArray[i]  +"<br/>"); 
}
document.write("--------------------------<br/>");

function 
existeClave(lista,clave) {
    return (
clave in lista);
}

document.write("¿Existe la clave 'dospordos'? "+existeClave(miArray'dospordos')   +"<br/>");
document.write("¿Existe la clave 'sesenta'? "+existeClave(miArray'sesenta')   +"<br/>");
document.write("¿Existe la clave 'no existo'? "+existeClave(miArray'no existo')   +"<br/>");
document.write("--------------------------<br/>");

// Miramos si existe el valor en el array asociativo. Devuelve la clave si sí existe, false si no existe.
// No devuelve varias claves si hay valores iguales en el array
// No compatible con array que tenga como clave false, no notaremos la diferencia si existe el valor o si no.
function existeValor(listavalor){
    for(var 
i in lista)
        if (
lista[i] === valor)
            return 
i;
    return 
false;
}

document.write("¿Existe el valor 'otra frase larga'? "+existeValor(miArray'otra frase larga')   +"<br/>");
document.write("¿Existe el valor '4'? "+existeValor(miArray4)   +"<br/>");
document.write("¿Existe el valor 'no existo'? "+existeValor(miArray'no existo')   +"<br/>");
document.write("--------------------------<br/>"); 

Como ves la función existeClave() será muy rápida y la función existeValor() será muy lenta, pero las dos funcionan satisfactoriamente. Fíjate en la forma de recorrer el array, y que la propiedad length de miArray contendrá 3, que son los índices numéricos definidos.




Un saludo y espero que con esto ver la solución sea sencillo.


Byes.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #15 (permalink)  
Antiguo 16/08/2007, 19:14
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Re: Problema al obtener valor de un array

Cita:
Iniciado por TCL_ZIP Ver Mensaje
ok, mmmm y pero el codigo tambien contiene caracteres, eso se podria hacer? como se declararia en el caso de que se pudiera declarar como indice una cadena de caracteres?
¡Je, je!... después del ejemplico de derkenuke poco más podría añadir...

Un ejemplo más:

Código:
<script >
var dato = new Array();
dato["perro"] = "canino";
dato["gato"] = "felino";
function describir(animal) {
 return (dato[animal] == undefined) ? "indescriptible" : dato[animal];
}

</script>
con describir("gato") se obtendría "felino"... y con describir("escarabajo") obtendremos la descripción "indescriptible"...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #16 (permalink)  
Antiguo 21/08/2007, 04:25
Avatar de TCL_ZIP  
Fecha de Ingreso: noviembre-2003
Ubicación: Esporles, Mallorca, España
Mensajes: 690
Antigüedad: 20 años, 5 meses
Puntos: 4
Re: Problema al obtener valor de un array

Muchisimas gracias a todos!! he unido todas vuestras respuestas y al final todo funciona, por si alguien le interesa lo he echo asi:

codigo javascript:
Código:
<script LANGUAGE="JavaScript"> 
<!-- 
var componentes_array = new Array();
<%
While ((Repeat1__numRows <> 0) AND (NOT componentes.EOF))
%>
componentes_array["<%=(Replace(componentes.Fields.Item("CODART").Value, chr(34), "'") )%>"]= "<%=(Replace(" "&componentes.Fields.Item("DESCRIP").Value, chr(34), "'") )%>" ;
<% 
  Repeat1__index=Repeat1__index+1
  Repeat1__numRows=Repeat1__numRows-1
  componentes.MoveNext()
Wend
%>
function describir(id) {
 return (componentes_array[id] == undefined) ? "No existe dicho componente" : componentes_array[id];
}
// -->
</script>
boton de accion:
Código:
<button type="button" onclick="COMPOPRODDESC.value = describir(COMPOPRODID.value)" >obtener descripción </button>
es javascript/HTML/VBscript(asp)

un saludo ^^
  #17 (permalink)  
Antiguo 21/08/2007, 04:55
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Re: Problema al obtener valor de un array

¡Que bien!

Me gusta el resultado, código sencillo y efectivo, ¡Enhorabuena!

__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
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 00:13.