2009-08-19 14 views

risposta

34

vi consiglio di farlo nel "ID" via in stile.

Aggiungi uno strato di divisione dello schermo intero, trasparente, a schermo intero sopra la Pagina. In questo modo, l'utente non può nemmeno fare clic su un collegamento.

Per dare all'utente una risposta visiva che la pagina è disabilitata, è possibile effettuare la divisione con . g. 50% nero trasparente.

BTW, ecco anche un jQuery Plugin che utilizza una tecnica simile.

+7

Sfortunatamente questo non aiuta se riesci a mettere a fuoco uno degli elementi dietro il div (facendo tabulazione su di esso o con una scorciatoia da tastiera) – Darren

+0

@Darren - Sì, per simulare correttamente una finestra di dialogo modale, devi intercettate anche tutti gli eventi della tastiera, in particolare i tasti Tab, per evitare che il focus lasci l'elemento di dialogo. Probabilmente è possibile resettare tutti gli elementi tabulabili in 'tabindex = '- 1'', ma dopo aver chiuso la finestra di dialogo è necessario ripristinarli tutti. –

9

Non so il motivo per cui si avrebbe bisogno di questo, ma questo funzionerà:

// 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

non dimenticare i textareas! : D –

+1

questo è solo un esempio, si potrebbe fare lo stesso con 'textarea' e' select' – RaYell

+1

Ma è necessario occuparsi anche di altri elementi. Div, span, ecc. Per impedire che i loro eventi accadano. – rahul

12

Prova questo,

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; 
       } 
      } 
     } 
    } 

Oppure si può provare anche questo, come ha detto 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; 
    } 
} 

Per disattivare l'intera pagina è possibile trovare alcune informazioni here,

4

Tutti gli elementi del modulo (ingressi, seleziona, textarea) all'interno di una forma, sono accessibili attraverso la form.elements HTMLCollection, è possibile scorrere la collezione disabilitando ogni elemento:

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

Esempi di utilizzo:

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

Forse affermando l'ovvio, ma la stessa funzione (ottimizzata) può essere utilizzata per riattivare il modulo. 'function enableForm (form) {var length = form.elements.length, i; for (i = 0; i whitebeard

3

Una volta ho dovuto creare un tutorial per il mio sito web. Avevo bisogno di disabilitare tutte le interazioni su una pagina escludendo alcuni elementi. Per fare ciò ho usato questo metodo: Prima assicurati di rimuovere tutti i collegamenti degli eventi dai tuoi elementi di pagina. È possibile farlo utilizzando:

$('*').unbind(); 

Successivo disattivare tutti i link sulla vostra pagina:

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

e disattivare tutti gli ingressi:

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

il codice deve essere eseguito alla fine del tuo documento. Tra parentesi è possibile escludere alcuni elementi all'interno del selettore jquery per mantenerli attivi.

+1

oppure è possibile eseguirlo nel '$ (function() {})' gestore DOM ready. –

15

Il modo più semplice è quello di mettere tutti gli elementi del modulo che si desidera disabilitare all'interno di un <fieldset> e quindi disabilitare il fieldset stesso.

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

Se non si desidera che il bordo attorno al fieldset, rimuoverlo per css.

+1

Nota che su IE, i campi di testo sono disattivati, ma comunque modificabili. –

-1

Il modo migliore è aggiungere un div con il più alto z-index con larghezza: 100% e altezza: 100%. Coprirà l'intera pagina e renderà tutto non cliccabile significa disabilitato virtualmente. È meglio, perché sarà non utilizzare alcun ciclo e nessun codice complesso.

1

Solo e senza stampelle!

/** 
* 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 
Problemi correlati