2009-08-19 32 views

Respuesta

34

que sugieren que hacerlo de la "mesa de luz" camino al estilo.

Agregue una capa div de posición completa, transparente y de pantalla completa sobre la página. De esta manera, el usuario ni siquiera puede hacer clic en un enlace.

Para dar al usuario un comentario visual de que la página está deshabilitada, puede hacer la división. gramo. 50% negro transparente.

BTW, aquí hay también un jQuery Plugin que utiliza una técnica similar.

+7

Desafortunadamente esto no ayuda si se puede obtener el foco de uno de los elementos detrás de la div (tabulando a ella o con una combinación de teclas) – Darren

+0

@Darren - Sí, para simular correctamente un diálogo modal, lo que tiene que atrape todos los eventos del teclado, especialmente las teclas Tab, para evitar que el foco salga del elemento de diálogo. Es posible que posiblemente restablecer todos los elementos de lengüeta capaz de 'tabindex = '- 1'', pero luego se va a restablecer a todos de vuelta después del cierre de la ventana de diálogo. –

9

No sé por qué se necesita eso, pero esto funcionará:

// this will disable all input elements 
var elems = document.getElementsByTagName('input'); 
var len = elems.length; 

for (var i = 0; i < len; i++) { 
    elems[i].disabled = true; 
} 
+3

¡no olvide las textareas! : D –

+1

esto es sólo un ejemplo, usted podría hacer lo mismo con '' textarea' y select' – RaYell

+1

Pero hay que tener cuidado de otros elementos también. Div, span, etc. para evitar que sucedan los eventos. – rahul

12

Prueba de esto,

function disableForm(theform) { 
     if (document.all || document.getElementById) { 
      for (i = 0; i < theform.length; i++) { 
      var formElement = theform.elements[i]; 
       if (true) { 
        formElement.disabled = true; 
       } 
      } 
     } 
    } 

o bien puede probar esto también, como dijo RaYell

function disableForm() { 
    var inputs = document.getElementsByTagName("input"); 
    for (var i = 0; i < inputs.length; i++) { 
     inputs[i].disabled = true; 
    } 
    var selects = document.getElementsByTagName("select"); 
    for (var i = 0; i < selects.length; i++) { 
     selects[i].disabled = true; 
    } 
    var textareas = document.getElementsByTagName("textarea"); 
    for (var i = 0; i < textareas.length; i++) { 
     textareas[i].disabled = true; 
    } 
    var buttons = document.getElementsByTagName("button"); 
    for (var i = 0; i < buttons.length; i++) { 
     buttons[i].disabled = true; 
    } 
} 

Para desactivar toda la página se puede encontrar algo de información here,

4

Todos los elementos del formulario (entradas, selecciona, áreas de texto) dentro de un formulario, son accesibles a través de la form.elements HTMLCollection, se puede recorrer la colección desactivación de cada elemento:

function disableForm(form) { 
var length = form.elements.length, 
    i; 
    for (i=0; i < length; i++) { 
    form.elements[i].disabled = true; 
    } 
} 

ejemplos de uso:

disableForm(document.forms[0]); 
disableForm(document.getElementById('formId')); 
+0

indicando Tal vez lo que es obvio, pero la misma función (ajustado) se puede utilizar para volver a habilitar la forma. 'function enableForm (form) {var length = form.elements.length, i; for (i = 0; i whitebeard

3

Una vez tuve que crear un tutorial para mi sitio web. Necesitaba deshabilitar todas las interacciones en una página excluyendo algunos elementos. Para hacerlo, utilicé este método: Primero asegúrese de eliminar todos los enlaces de eventos de los elementos de su página. Usted puede hacer esto mediante el uso de:

$('*').unbind(); 

Siguiente desactivar todos los enlaces de una página:

$('a').each(function(){$(this).click(function(){return false;})}); 

y desactivar todas las entradas:

$('input').attr('disabled', true); 

El código debe ser ejecutado al final de su documento. Por cierto, puede excluir algunos elementos dentro del selector de jquery para mantenerlos activos.

+1

o puede ejecutar esto en los '$ (function() {})' manejador de listas de DOM. –

15

La manera más fácil es colocar todos los elementos de formulario que desee deshabilitar dentro de un <fieldset> y luego deshabilitar el conjunto de campos.

Un ejemplo: http://jsfiddle.net/xdkf9b8j/1/

Si no desea que el borde alrededor del conjunto de campos, eliminarlo por css.

+1

Tenga en cuenta que en IE, campos de texto están en gris, pero todavía puede editar. –

-1

La mejor manera es agregar un div con el índice z más alto con ancho: 100% y alto: 100%. Cubrirá toda su página y hará que todo lo que no se pueda hacer se deshabilite virtualmente. Es mejor, porque lo hará no use ningún bucle ni ningún código complejo.

1

Justo y sin muletas!

/** 
* Enable/disable all form controlls 
* @param status Status: true - form active, false - form unactive 
*/ 
HTMLFormElement.prototype.setStatus = function (status) { 
    for (var i in this.elements) { 
     this.elements[i].disabled = !status; 
    } 
}; 

// Example: 
var my_form = document.getElementById('my_form_with_many_inputs'); 
my_form.setStatus(false); // Disable all inputs in form 
my_form.setStatus(true); // Enable all inputs in form 
Cuestiones relacionadas