2009-08-19 11 views

Répondre

34

je suggère de le faire le "Lightbox" façon de style.

Ajoutez un calque div en mode plein écran, transparent et positionné au-dessus de la page. De cette façon, l'utilisateur ne peut même pas cliquer sur un lien.

Pour donner à l'utilisateur un retour visuel indiquant que la page est désactivée, vous pouvez créer la division. g. 50% noir transparent.

BTW, voici également un jQuery Plugin qui utilise une technique similaire.

+7

Malheureusement, cela ne vous aide pas si vous pouvez obtenir le focus sur l'un des éléments derrière le div (en le tabulant ou avec un raccourci clavier) – Darren

+0

@Darren - Yep, pour simuler correctement un dialogue modal, vous devez piège tous les événements de clavier, en particulier les touches de tabulation, pour empêcher le focus de quitter l'élément de dialogue. Vous pouvez éventuellement réinitialiser tous les éléments tabables de 'tabindex = '- 1'', mais vous devez les réinitialiser tous après la fermeture de la boîte de dialogue. –

9

Je ne sais pas pourquoi vous auriez besoin cela, mais cela fonctionnera:

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

ne pas oublier les zones de texte! : D –

+1

c'est juste un exemple, vous pourriez faire la même chose avec 'textarea' et' select' – RaYell

+1

Mais vous devez également prendre soin d'autres éléments. Div, span, etc pour empêcher leurs événements de se produire. – rahul

12

Essayez ceci,

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

Ou bien vous pouvez essayer cela aussi, comme RaYell dit

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

Pour désactiver la page entière, vous pouvez trouver quelques informations here,

4

Tous les éléments de formulaire (entrées, sélectionne, textareas) dans une forme, sont accesible par la form.elements HTMLCollection, vous pouvez itérer la collection de désactiver chaque élément:

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

Exemples d'utilisation:

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

Peut-être en indiquant l'évidence, mais la même fonction (tweaked) peut être utilisée pour réactiver le formulaire. 'function enableForm (form) {var longueur = forme.éléments.length, i; pour (i = 0; i whitebeard

3

Une fois j'ai dû créer un tutoriel pour mon site web. J'avais besoin de désactiver toutes les interactions sur une page en excluant certains éléments. Pour ce faire, j'ai utilisé cette méthode: D'abord, assurez-vous de supprimer toutes les liaisons d'événements de vos éléments de page. Vous pouvez le faire en utilisant:

$('*').unbind(); 

Suivant désactiver tous les liens sur votre page:

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

et désactiver toutes les entrées:

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

Le code doit être exécuté à la fin de votre document. BTW vous pouvez exclure certains éléments dans jquery selector pour les garder actifs.

+1

ou vous pouvez l'exécuter dans le gestionnaire DOM ready de $ (function() {}) 'DOM. –

15

La méthode la plus simple consiste à mettre tous les éléments de formulaire que vous souhaitez désactiver à l'intérieur d'un <fieldset>, puis de désactiver le jeu de champs lui-même.

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

Si vous ne voulez pas la bordure autour du fieldset, retirez-le par css.

+1

Notez que sur IE, les champs de texte sont grisés, mais toujours modifiables. –

-1

Le meilleur moyen est d'ajouter une div avec le plus haut indice z ayant largeur: 100% et hauteur: 100% .Il va couvrir toute votre page et rendre tout non cliquable signifie pratiquement désactivé.Il est préférable, car il sera n'utilise aucune boucle et aucun code complexe.

Questions connexes