Afficher un message
Vieux 17/08/2007, 21h02   #6
Laurent vilday
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Désactiver une page Html

Delf a écrit :
> J'ai des pages Web qui effectuent des traitements asynchrones lors de la
> validation de leur formulaires.
>
> Une fois le formulaire validé, j'affiche une DIV en haut à droite du
> navigateur pour indiquer l'état du traitement. Cependant, la page peut être
> revalidée ou les champs modifiés.
>
> Je désactive donc les contrôles du formulaire via disabled. Cependant, je
> suis *fatigué* de devoir coder tout ça pour chaque page.
>
> Est-il possible d'écrire une fonction générique désactivant tous les INPUT
> (textbox, textarea, radiobutton, checkbox, etc) ? Genre, elle parcourt tous
> les contrôles de la page et les désactive...


function desactive(frm)
{
var i, E;
for ( i = frm.elements.length; i--; )
{
E = frm.elements[i];
// si l'élément a la classe "keepActive"
// alors ne rien faire
if ( /\bkeepActive\b/.test(E.className) ) { continue; }
E.oldDisabled = E.disabled || null;
E.disabled = true;
}
}

function active(frm)
{
var i, E;
for ( i = frm.elements.length; i--; )
{
E = frm.elements[i];
if ( /\bkeepActive\b/.test(E.className) ) { continue; }
E.disabled = E.oldDisabled;
}
}

<form>
<input type="button" onclick="desactive(this.form)" class="keepActive"
value="Deactivate">
<input type="button" onclick="active(this.form)" class="keepActive"
value="Activate">
<br>
<input type="text">
<input type="text" disabled="disabled">
<br>
<textarea></textarea>
<textarea disabled="disabled"></textarea>
<br>
<input type="checkbox" name="y" value="1">
<input type="checkbox" name="y" value="2" disabled="disabled">
<br>
<input type="radio" name="x" value="1">
<input type="radio" name="x" value="2" disabled="disabled">
<br>
<select><option>0</option></select>
<select disabled="disabled"><option>1</option></select>
</form>

> Autre question : pensez-vous qu'il soit judicieux de désactiver aussi les
> liens ?


Dans ce cas autant mettre un gros div qui intercepte les clicks par
dessus tout le monde plutot que de s'embêter avec chaque élément. Parce
que après les liens, ca va être les éléments avec un event mouseover,
click ou autre qu'il va falloir tracker. Trop fatiguant imo.

function divAntiClick()
{
var
div = document.createElement('div'),
dS = div.style,
dB = document.body;
// interdit les clicks
div.onclick = function() { return false; };
dS.opacity = 0.25;
// opacité pour IE
/*@cc_on dS.filter = 'alpha(opacity=25)'; @*/
dS.backgroundColor = 'black';
dS.position = 'absolute';
dS.top = '0px';
dS.left = '0px';
dS.width = '100%';
dS.zIndex = 1e6;
// enregistre l'état d'overflow avant modif
dB.oldOverflow = dB.style.overflow;
// supprime l'overflow pour empêcher le user
// de servir des scrollbars. Ne pas oublier
// lors de la réactivation de replacer l'overflow
// à sa valeur initiale stockée dans oldOverflow
dB.style.overflow = 'hidden';
// détermine la hauteur du div, cf fonction suivante
dS.height = getViewportHeight() + 'px';
// ajoute enfin le div
dB.appendChild(div);
}

/**
* Returns the current height of the viewport.
* @return {Int} The height of the viewable area
* of the page (excludes scrollbars).
*/
function getViewportHeight()
{
var
IE = /*@cc_on !@*/false,
height = -1;

// IE, Gecko
if ( ( document.compatMode || IE ) && !window.opera )
{
// Standards mode
if ( document.compatMode === 'CSS1Compat' )
{
height = document.documentElement.clientHeight;
}
// Quirks
else { height = document.body.clientHeight; }
}
// Safari, Opera
else { height = self.innerHeight; }

return height;
}

--
laurent
  Réponse avec citation
 
Page generated in 0,09025 seconds with 9 queries