2011-05-03 18 views
5

Al usar Javascript, se muestra cómo mostrar y ocultar algunas partes de la tabla (Ej .: TR o TD). Esto debería funcionar según los datos obtenidos de la base de datos. Estoy usando el marco de CakePHP para mi aplicación y usando un solo archivo de vista para agregar y editar. En el modo de edición: Dependiendo de los datos obtenidos, necesito mostrar y ocultar algunas partes de los elementos del formulario.Javascript-CSS Mostrar y Ocultar elementos de formulario

Escenario Hay cinco preguntas A, B, C, D nad E B depende de A, C depende de B, D depende de C y E depende de D Así, mientras que la adición de He escondido B, C, D y E al seleccionar las preguntas respectivas, se mostrarán las demás preguntas. A, B, C, D - Todas son preguntas "Sí/No" (botones de opción).

Ej:

<'table> 
<'tr id='a'> 
    <'td colspan='2'>A<'/td> 
<'/tr> 
<'tr id='b'> 
    <'td colspan='2'>B<'/td> 
<'/tr> 
<'tr id='cd'> 
    <'td id='c'>C<'/td><'td id='d'>D<'/td> 
<'/tr> 
<'/table> 

(' Prefijo para todas las etiquetas HTML)

¿Cómo puedo hacerlo. Por favor publique sus comentarios.

+0

Gracias Richard, RobG, M.Azad por su pronta respuesta. Puedo entender las propiedades CSS y cómo hacer lo mismo con JS. No estoy seguro de que te haya explicado correctamente. Si no me disculpas Déjame tratar de explicar en detalle. Mi pregunta es Estoy usando una sola página para AGREGAR y EDITAR. La funcionalidad Agregar página funciona bien y se ha implementado por la forma que ustedes explicaron anteriormente. – user599531

+0

continuación .. Supongamos los siguientes pasos en la funcionalidad de complemento 1. Seleccione Sí en la pregunta A 2. Seleccione Sí para la pregunta B 3. Seleccione No para la pregunta C continuación .... En el modo de edición (la misma página), debe mostrar las preguntas A, B, C y ocultar D. Pero esto es dinámico para todos y cada uno de los registros. Hasta ahora no he implementado para el modo de edición (Esa es una pregunta aquí). Entonces, en el modo de edición, solo puedo ver la pregunta "A". En este momento, todos los demás campos están ocultos y se está ejecutando como agregar página. – user599531

+0

continuación .. La solución debe ser: 1. Primero debemos diferenciar la página de agregar y editar. 2. Si agrega. muestre y oculte los campos respectivos, que se codificarán en forma difıcil 3. Si edita, ¿cómo se muestran y ocultan los campos respectivos que es dinámico y se basa en el conjunto de registros de la base de datos? (Hay pocas maneras de implementarlo en mi mente, pero buscando la manera optimizada. Así que por favor ponga sus comentarios y pensamientos) Espero que esto tenga sentido ..... :) – user599531

Respuesta

12

CSS tiene dos atributos especiales, el primero es display y el segundo es visibility.

pantalla

tiene muchas propiedades o valores, pero los que necesitamos son none y block. none es como un valor oculto, y block es como mostrar. Si usa el valor none, ocultará por completo la etiqueta HTML que haya aplicado este estilo CSS. Si usa block, verá la etiqueta HTML y su contenido.

visibilidad

tiene muchos valores, pero que quieren saber más acerca de los valores y hiddenvisible. hidden funcionará de la misma manera que el valor block para mostrar, pero esto ocultará la etiqueta y su contenido, pero no ocultará el espacio físico de esa etiqueta.

Por ejemplo, si tiene un par de líneas de texto, luego una imagen (imagen) y luego una tabla con tres columnas y dos filas con iconos y texto. Ahora si aplica el CSS visibility con el valor hidden a la imagen, la imagen desaparecerá pero el espacio que la imagen estaba usando permanecerá en su lugar. En otras palabras, terminará con un gran espacio (hoyo) entre el texto y la tabla. Ahora, si usa el valor visible, su etiqueta objetivo y sus elementos serán visibles nuevamente.

A continuación, puede cambiarlos a través de JavaScript para display:

document.getElementById(id).style.display = "none"; 
document.getElementById(id).style.display = "block"; 

para visibility:

document.getElementById(id).style.visibility= "hidden"; 
document.getElementById(id).style.visibility= "visible"; 

para que pueda crear una función que hace esto, y después hacer referencia a esa función cuando han seleccionado la respuesta correcta. Depende de cómo lo seleccionan a cómo lo mostraría.

De lo contrario, si esto no es lo que desea la función innerHTML también podría funcionar.

+1

Para mostrar, no use 'bloque' para volver a mostrar el elemento, ya que la propiedad de visualización puede tener muchos valores diferentes (en particular, TR y TD tienen diferentes valores de visualización predeterminados en diferentes navegadores). En su lugar, use '' (cadena vacía) para que regrese a su valor predeterminado o heredado. – RobG

+0

que funcionaría también – Richard

2

Para ocultar un elemento pero mantener su lugar dentro del flujo de documentos (es decir, ocultarlo no hará que otros elementos se muevan hacia arriba y llenen su espacio), establezca su propiedad style.visibility en "oculto". Para volver a mostrarlo, configúralo como "visible".

p. Ej.

var el = document.getElementById('a'); 
a.style.visibility = 'hidden'; 
a.style.visibility = 'visible'; 

Para ocultar un elemento y sacarlo de la corriente (es decir, será como si no fuera en el documento, otros elementos se llenan su lugar) establezca su propiedad style.display a "ninguna". Para volver a mostrarlo (y provocar un nuevo flujo del documento porque ahora el elemento ocupará espacio nuevamente) establézcalo en "" (cadena vacía).

var el = document.getElementById('a'); 
a.style.display = 'none'; 
a.style.display = ''; 

Esto último es muy importante ya que permite que el elemento de volver a su valor por defecto o pantalla hereditaria, lo que podría ser cualquiera de una serie de valores (e incluso podría ser diferente a cuando estaba oculto) .

1

Si puede utilizar jQuery es fácil: ("#b").css("display","none"); o ("#b").css("display","block");

Si no se utiliza jQuery echa un vistazo a este quirksmode.org article.

0

que añadir a lo escribió M. Azad, si estás usando jQuery, la manera más fácil de ocultar/mostrar algo es utilizar ocultar(), show(), o de palanca(), así: ("#b").hide(); or ("#b").show(); or ("#b").toggle();

toggle() ocultará un elemento visible o mostrará un elemento oculto. Estas funciones también tienen características de animación. Puede leer sobre ellos aquí: http://api.jquery.com/hide/

jQuery es una excelente biblioteca. Muchos lectores de stackoverflow están familiarizados con él, estoy seguro, pero para aquellos que no lo están, vale la pena estudiarlo, y su documentación en línea es excelente.

Cuestiones relacionadas