Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Ogramar

Páginas: 1 2 3 4 5 [6] 7 8 9 10 11 ... 91
101
Buenas, buena presentación y buen código. En mi caso con MSIE tampoco ha funcionado. En primer lugar, debido a la configuración de seguridad del navegador. A mí me aparece el mensaje "Internet Explorer no permitió que esta página web ejecutara scripts o controles ActiveX en el equipo". Si le indico "Permitir" en la parte de expresiones regulares sigue sin funcionarme, y en la parte de indexOf me aparece "Usted está usando el navegador: Navegador desconocido".

En window.navigator.userAgent lo que me devuelve es: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; rv:11.0) like Gecko

Mozilla era la mascota de Netscape, y Netscape fue uno de los navegadores más populares (o el más popular) en la época en que internet se expandió y comenzó a ser usado por todo el mundo. Confunde porque cuando vemos Mozilla normalmente pensamos en Mozilla Firefox, pero en este caso no es el user-agent de Firefox sino de una versión del Explorer.

Tradicionalmente siempre que los navegadores eran Microsoft Internet Explorer, en el user-agent string aparecía MSIE, pero hay versiones donde no aparece y tendrían que ser identificados de otra manera.

En fin, un pequeño lío. De cualquier forma, el objetivo en el curso es tener una idea general sobre el reconocimiento de navegadores y por ese lado misión cumplida.
 
Salu2

102
Buenas, todo bien. Los inconvenientes que tendría el uso de closures sería que si se crean indiscriminadamente en número excesivo, consumen recursos del computador innecesariamente.

Salu2

103
Comunidad / Re:Hola a todos
« : 22 de Junio 2018, 19:05 »
Buenas Toshirou, da gusto ver cómo en esta web nos entremezclamos personas de todo el planeta con interés por la programación. Esperamos contar contigo para enriquecer los foros. Salu2 desde España

104
Buenas, todo bien. Copio una explicación que me ha parecido interesante: "Toda función define un ámbito y una función dentro de otra función puede hacer que this no se refiera a lo mismo según dónde lo usemos. Por ejemplo, si tenemos una función anónima dentro de otra, this en la función externa puede estar haciendo referencia al objeto envolvente mientras que this en la función anónima puede estar haciendo referencia al objeto global window.

La solución para mantener una referencia a this en una función anónima interna puede estar en crear un closure. Definiríamos como variable local a la función externa var that = this;, y luego en la función anónima interna haríamos referencia a that, variable auxiliar que nos sirve para mantener la referencia deseada."


Salu2

105
Buenas, todo bien. Las variables que has indicado Tipo Numérica Entera se corresponderían con el tipo Number de JavaScript, que es el tipo que se asigna por defecto a valores numéricos cuando no hay una declaración explícita de tipo.

Salu2

106
Buenas, felicitarte porque el comentario del código está muy completo y con el juego del frontón, más allá de que sea mejorable, se demuestra que has ido adquiriendo manejo de numerosos conocimientos de programación, toda una base de gran interés y ejemplo para otras personas que consulten los foros y vean cómo se puede progresar dedicándole tiempo y esfuerzo ;)

Salu2

107
Buenas, el ejercicio 1 funciona correctamente. Hay una cosa que no me parece demasiado "limpia". Si el usuario acierta el número, para forzar la salida del bucle de solicitud de número escribes i=31; Esto en cierta medida es decir, si el usuario lleva 6 intentos y acierta el número, para salir decimos que el usuario lleva 30 intentos. Esto aunque funcione puede generar problemas de depuración en programas largos. Imagina que en un  momento dado se decide mostrar el número de intentos que ha tardado en acertar el número. Ahí podrían venir problemas. Desde mi punto de vista sería más adecuado que en la propia condición del bucle se controlara si lleva menos de 30 y no ha acertado, en lugar de valernos de "un truco".

Otra cosa que no veo correcta del ejercicio 1 es que empiece diciendo "Le quedan 29 intentos" y que termine dicendo "Le quedan 0 intentos". Creo que sería preferible que empezara diciendo que le quedan 30 intentos y que terminara diciendo que le queda 1 intento.

El ejercicio 2 y 3 todo bien. Bueno, a mí me ha mareado un poco que el texto volador vaya cambiando de colores :)

Salu2

108
Buenas, he estado mirando alternativas y lo que me ha funcionado mejor es  

Se recomienda que el código vaya dentro de etiquetas <pre> ... </pre> ya que en caso contrario los navegadores tienden a colapsar de forma automática los espacios en blaco.

Este código me ha servido, aunque si quisieras cuadrar textos de longitudes muy diferentes quizás tendrías que ponerte a contar caracteres para cuadrarlo con exactitud.

Código: [Seleccionar]
<!DOCTYPE html>
<html>

<head>
<meta charset="utf-8">
<title>Ejemplo del uso de formularios - aprenderaprogramar.com</title>
</head>

<body>
<form method="get" action="http://aprenderaprogramar.com/action.php">

Elije solo una opción, como en los botones radio:
<pre>
<select name="entradalista1">

<option>Pedro Perez de la Rosa &emsp; 41 años &emsp; Piel blanca</option>
<option>Juan &emsp; 42 años si no se tiene en cuenta que fue inscrito tarde &emsp; Piel blanca</option>
<option>Alfredo Perez &emsp; 43 años &emsp; Piel blanca</option>

</select>
</pre>
<br /><br /><br /><br />

</form>
</body>
</html>

Salu2

109
Buenas, todo correcto, buen código. Por comentar algo, en lugar de gettexto preferible getTexto. En cuanto a nombre de la clase, GestionTeclado no es demasiado adecuado porque suena muy bien decir "he creado un objeto gestión de teclado". Preferible GestorTeclado para poder decir "he creado un objeto gestor de teclado". La forma de nombrar clases en Java se comenta en https://aprenderaprogramar.com/foros/index.php?topic=3035.msg13698#msg13698

Salu2

111
Buenas, el ejercicio 1 está correcto. En el ejercicio 2 al hacer pruebas me he encontrado un pequeño problema. Si le introduzco como fecha 1 un día y como fecha 2 el mismo día, me aparece un mensaje del tipo:

Desde las 00:00 del dia :5/6/2094 A las 00:00 del dia : 5/6/2094
hay : 1 dia(s) de diferencia
Primer dia incluido desde las 00:00 horas

Si introduzco un día de diferencia me dice que hay 2

Desde las 00:00 del dia :5/6/2094 A las 00:00 del dia : 6/6/2094
hay : 2 dia(s) de diferencia
Primer dia incluido desde las 00:00 horas

Esto no es correcto, habría que corregir el código.

Una sorpresa con la que me he encontrado es que en el navegador que estoy utilizando al tener input type="date" automáticamente me aparece un calendario de selección cuando hago click en la caja para selección de fecha. En navegadores más antiguos creo que esto no funcione.

Al igual que en otras ocasiones indicar que hay algo que no es adecuado: el nombre de la función Comenzar no describe lo que es o hace la función. Esto se considera una mala práctica de programación porque en programas de miles de líneas hace el código confuso y difícil de depurar. Si se quiere incluir todo en una función en este caso podría llamarse codigo_ejercicio_CU01163E_1, algo que indique qué es o qué hace el código.

Salu2

112
Buenas, el ejercicio está bien resuelto. Hay un aspecto del diseño del código que recomendaría mejorar. Con esto me refiero a los nombres de las funciones y el contenido de las mismas. El nombre de una función debe representar lo que es o lo que hace. En el caso de una función entrarDatos debería servir únicamente para entrar datos. Sin embargo en esta función vemos que entrarDatos recupera la fecha, genera una tabla, etc.

Código: [Seleccionar]
function entrarDatos()
{
fechaActual=new Date();
cogerMesAñoDia();
generaTabla();
atributosTabla();
return fechaActual;
}

Esto se recomienda una mala práctica de programación porque en programas de miles de líneas hace el código confuso y difícil de depurar.

Para evitar problemas con los juegos de caracteres recomendamos no usar eñes en el código, por ejemplo en lugar de cogerMesAñoDia usar cogerMesAnnoDia

Salu2

113
Buenas, el ejercicio 1 funciona bien, no obstante, parece repetitivo ejecutar la función con onkeyup, onkeypress y onkeydown. En este otro hilo https://aprenderaprogramar.com/foros/index.php?topic=6432.0 se hace solo con onkeypress que supuestamente debe ir bien en todos los navegadores. No sé si lo has hecho por tener problemas con algún navegador.

Ejercicio 2 correcto.

Salu2

114
Buenas, creo que habría muchos factores que valorar: si se da más importancia al precio o a la calidad del servicio, si se requiere soporte telefónico o no, si se quiere un hosting compartido o uno dedicado, si el servidor lo quiere administrar uno mismo o que se lo administren, qué base de datos se va a utilizar, etc. Salu2

115
Buenas, el ejercicio está bien resuelto. No entiendo muy bien por qué le restas 430 y 120. A mí por ejemplo me salen en algunos casos coordenadas negativas. Una buena idea sería determinar como coordenadas (0,0) la esquina inferior izquierda del div, y hacer que se muestren las coordenadas a partir de ese punto. Por ejemplo, si estuviéramos en la esquina superior derecha del div debería mostrar (500, 400)

Salu2

116
Buenas, ambos códigos funcionan correctamente y están bien planteados. En el ejercicio 2 en mi navegador se ve mal el cuadro amarillo que donde están los campos del formulario debido a la regla CSS height:125px; Si lo dejo comentado con //height:125px; ya se ve correctamente. Esto ya se ha comentado en algún ejercicio anterior, en general los height no los establecemos mediante CSS sino dejamos que sea el flujo del contenido el que determine los valores de altura.

Salu2

117
Buenas, el ejercicio ha quedado muy bien y explicativo porque al aplicarle css y delimitar con colores los distintos div se diferencia muy bien cada cosa y vemos cómo se propaga el burbujeo según dónde hagamos click.

Al ejecutar el código he visto que después del párrafo y los div, el burbujeo prosigue hacia niveles superiores. Si queremos detenerlo, basta con incluir el alert dentro del if que te identifica si el nodo es de tipo párrafo o de tipo div:

Código: [Seleccionar]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
<title>sin título</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<meta name="generator" content="Geany 1.32" />
</head>
<script>
window.onload = function ()
{
msg="";
var elemento=document.querySelectorAll('p,div')
for (var i=0;i<elemento.length;i++)
{

elemento[i].addEventListener("click", nodoDOOM)

}

document.addEventListener("click", nodoDOOM)
window.addEventListener("click", nodoDOOM)
 
function nodoDOOM()
{ //**********************************************************************************
//Codigo añadido para comprobar el burbujeo y saber en que nodo nos encontramos
var nombre=this.nodeName;
if( nombre=='P'||nombre=='DIV'){msg=this.firstChild.nodeValue;
alert("Soy un nodo tipo "+ this.nodeName +" "+msg+" y estoy burbujeando" );

}
//*********************************************************************************
//*********************************************************************************
   
msg="";
}

}

</script>
<style>
  body *
 {
    margin: 10px;
    border: 5px solid white;
    text-align:center;
  }
 body{background-color: yellow; }
 #principal{
    position: absolute;
top:50%;
left:50%;
width:300px;
margin-left:-200px;
margin-top:-150px;
padding:5px;
background-color:red;
}
 #secundario{width:250px;background-color:blue;}
 #terciario{width:200px;background-color:green;}
 p{width:150px;background-color:yellow;}
 h1,h2{border: none;}
</style>
<body>
<h1>aprenderaprogramar.com<br>Ejercicio CU01158E<br></h1>
<h2>hacer click sobre cualquier cuadro</h2>
 
<div id="principal">div principal
  <div id="secundario" >div secundario
    <div id="terciario" >div terciario
    <p>Ejemplo de bubbling (burbujeo)</p>
    </div>
  </div>
 
</body>

</html>

Salu2

118
Buenas, la alusión a si el ejercicio no es correcto en el marco de la programación del curso, se refiere a que la metodología del curso se basa en la resolución de los ejercicios siempre basándose en los contenidos explicados en cada entrega en particular, y en entregas anteriores en general. Por ejemplo a mucha gente le gusta usar jQuery, pero usarlo dentro del curso no sería correcto en el marco metodológico que proponemos, porque jQuery no es un contenido que se explique en el curso. Lo mismo ocurre con usar contenidos de entregas más adelantadas en entregas previas, no lo recomendamos desde el punto de vista de la didáctica y no lo consideramos una buena solución desde el punto de vista de la didáctica. Luego cada cual es libre de seguir las recomendaciones didácticas o no, ahí están los contenidos y cada uno los aprovecha como mejor considera. Por ello no recomendamos usar innerHTML en entregas previas a la entrega donde se explica innerHTML, que concretamente es la entrega "innerHTML JavaScript. Modificar texto o html (p.ej. div) en tiempo real. this: acceder al nodo actual (CU01138E)". Todos los ejercicios anteriores a esta entrega, desde el punto de vista de la didáctica, deberían resolverse sin usar innerHTML.

Salu2

120
Buenas, ahora no recuerdo bien, pero el asunto estaría en el onclick="this." ¿Qué significa ese código? El error salta al hacer click en el div uno porque la acción que tienes especificada en el onclick no tiene sentido. Da la impresión de que eso se quedó ahí a medio hacer ¿? O algo que habías escrito y que luego borraste, no lo sé.

Salu2

Páginas: 1 2 3 4 5 [6] 7 8 9 10 11 ... 91
Esto es un laboratorio de ideas...
Aprender a programar

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".