Ver Mensaje Individual
  #2 (permalink)  
Antiguo 01/04/2012, 17:37
Avatar de zerokilled
zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: ¿Tendria que utilizar ajax? (ver código dentro del tema)

¡buenas!
primero a tu pregunta inicial, ¿tendría que utilizar ajax? no en tu caso, aunque se puede. es un no porque el contenido a mostrar no lo requiere. el contenido que vas a mostrar es estático o simple. o sea, no se trata de una situación donde tienes que traer contenido dado a unas condiciones complejas y/o que tengas que extraerlo de un archivo en el servidor o una base de datos. se puede hacer a modo de práctica pero considero que estarías utilizando mal las tecnologías. en todo caso, en la etapa que te encuentras actualmente podría resultarte más complejo. esto lo asumo dadas las dudas en el tema anterior y éste. también agrego que asumo tienes experiencia en otro lenguaje (aparentemente C++) y debes haberte dado cuenta que la forma de pensar/escribir es muy distinta. principalmente cuando se busca interacción entre usuario/aplicación se utiliza un esquema basado en eventos.

ahora a tu código. en el tema anterior no tenía claro que exactamente intentas lograr, pero ahora veo que quieres hacer algo así como mostrar contenido por capas o niveles. hay multitudes de formas de hacerlo pero no todas se consideran adecuadas. todo depende de tu perspectiva, enfoque o requisito. por ejemplo, la forma que lo estás haciendo es muy complicado tanto de desarrollar como de mantener. además, no es una buena práctica por otros factores como la accesibilidad. en este caso particular estas basando el contenido enteramente en javascript y debes saber que hay navegador que no tienen javascript y otros lo tienen desactivado. pero a la misma vez, también puede ser un buen ejercicio para desarrollar el intelecto a traves de experimentaciones y asociarse a su uso y limitaciones. por eso comentaba al inicio que depende de tu enfoque. no lo veo mal, solo que te recomendaría no acostumbrarte a la práctica inadecuada.

el primer problema en tu código y lo que realmente lo complica es el document.write (write y writeln son lo mismo, solo que el último introduce un salto de linea a nivel de código fuente cuando escribe el contenido). document.write tiene un efecto muy indeseable... cuando el stream de contenido que recibe el navegador se cierra, write tiene que volver abrirlo y esto causa que todo lo que antes tenía cargado se desecha de la memoria y la pantalla para así volver a escribir el nuevo contenido. incluso si lograras mantener abierto el stream para erradicar ese defecto, write te seguirá siendo inútil porque las próximas invocaciones imprime el resultado al final (esto si estuvieras usando el modelo de eventos).

error de concepto. aparentemente tienes la idea de que cuando se inicia el evento y este invoca changeN, es cuando se interpreta el elemento <script> que a su vez invoca al método Escuderia. pues lo cierto es que así no es como funciona. el navegador carga e interpreta el contenido de forma lineal con excepción de algunos recursos externos. en tu caso el evento no se inicia porque este tiene que ser activado por el usuario, pero el elemento <script> se interpreta. de modo que posiblemente en pantalla debes ver el texto "Texto de prueva default". luego, cuando finalmente el evento ocurre, el método solamente altera el valor de una propiedad pero no invoca el método que escribe en pantalla el contenido, o sea Escuderia(). en todo caso, invocarlo no te va servir por lo que antes expliqué, write limpia el contenido del navegador.

¿qué debes hacer? aquí es donde DOM (Document Object Model) juega un papel importante. el DOM te permite acceder a información del contenido y manipularla sin afectar otras áreas o solo afectando una porción de ella. visualizalo de esta manera, DOM es la representación del código fuente pero en forma binaria (o de memoria) estructurado de forma jerárquica. básicamente el DOM lo accesas por objetos predispuestos o por ciertos métodos para llegar a un punto particular de los elementos. entre las propiedades de los elementos tienes innerHTML el cual te muestra el código fuente interno de ese elemento en particular. a la misma vez lo puedes manipular y el navegador se encargará de analizarlo y mostrar los cambios. para que te hagas una idea usando más o menos lo que tienes pero adaptado con DOM. en el evento estoy usando onclick pero también puede ser otros tipos de eventos.

Código:
<script type="text/javascript>
var NombreEscuderia = function (n){
this.n = n;
this.changeN = function(N){
this.n = N;
}

this.Escuderia = function(){
var element = document.getElementById('container');
		switch (this.n) { 
   			 case 1: 
      		 element.innerHTML = "Texto de prueva";
      		 break
			 
			 case 2: 
      		 element.innerHTML ="Texto de prueva 2";
      		 break
		
		  	 default:
			 element.innerHTML = "Texto de prueva default";
	}
}
}

var NombreDefecto = new NombreEscuderia(0);

</script>
<div><button onclick="NombreDefecto.changeN(1);">1</button>
<button onclick="NombreDefecto.changeN(2);">2</button>
<button onclick="NombreDefecto.changeN(3);">3</button>
<button onclick="NombreDefecto.Escuderia();">mostrar</button></div>

<div id="container"></div>
para finalizar, no tengo idea de que material estas leyendo aunque sospecho que uno bien obsoleto. te recomendaría que busques otros materiales. por ejemplo, librosweb.es puede ser un buen inicio. lee los libros javascript y ajax, aunque en ajax te recomendaría que por el momento ignores lo relacionado a ajax. sucede que ese libro contiene material que a mi juicio debería ir en javascript porque no esta directamente relacionado con ajax en si.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.