2010-08-02 7 views

Respuesta

29

Esto es bastante simple en la llanura de JavaScript y funcionará de manera eficiente en todos los navegadores que soportan entradas de formulario de sólo lectura (que es más o menos todos los navegadores liberados en la última década):

var form = document.getElementById("your_form_id"); 
var elements = form.elements; 
for (var i = 0, len = elements.length; i < len; ++i) { 
    elements[i].readOnly = true; 
} 
+0

¿Entonces el usuario todavía puede enviar el formulario haciendo clic en el botón enviar? –

0
$("#formid input, #formid select").attr('disabled',true); 

o para que sea de sólo lectura:

$("#formid input, #formid select").attr('readonly',true); 
+1

Solo lectura no es lo mismo que deshabilitado. –

+0

@Tim Down, vale, actualicé mi respuesta por solo lectura. –

32

Puede utilizar el selector de :input, y hacer esto:

$("#myForm :input").prop('readonly', true); 

:input selecciona todo <input>, <select>, <textarea> y <button> elementos. Además, el atributo es readonly, si usa disabled para los elementos, no se publicarán en el servidor, por lo tanto, elija qué propiedad desea en función de eso.

+1

'button's,' input [type = submit] ', y' input [type = button] 'no son compatibles con la propiedad' readonly'. Consulte https://jsfiddle.net/z4hoh443/ para obtener un ejemplo y https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input para los documentos de origen. – philfreo

+0

Aunque se muestran en gris, las casillas de verificación y los botones de relación aún pueden cambiar sus valores. –

-5

Gracias Tim,

Eso fue realmente útil. He hecho un pequeño ajuste cuando tenemos controles y manejamos un evento sobre ellos.

var form = document.getElementById("form"); 
       var elements = form.elements; 
       for (var i = 0, len = elements.length; i < len; ++i) { 
        elements[i].setAttribute("onmousedown", ""); 
       } 
22

Con HTML5 es posible desactivar todas las entradas contenían el uso del atributo <fieldset disabled />.

discapacitados:

Si este atributo booleano está establecido, los controles de formulario que son sus descendientes, excepto descendientes de su primer elemento opcional , están desactivados, es decir, no editable. No recibirán ningún evento de exploración , como clics del mouse o relacionados con el enfoque. A menudo, los navegadores muestran controles como el gris.

Referencia: MDC: fieldset

+0

Esto funciona en html5. Además, si tiene js que altera los campos, deberá desactivar esa js. Puse mi fieldset como el elemento contenedor de mi formulario y usé este js para excluir cualquier proceso js de la alteración de datos de campo: 'if ($ ('# formID'). Parent(). Prop (" disabled ") == true) { falso retorno; } ' –

0
// get the reference to your form 
// you may need to modify the following block of code, if you are not using ASP.NET forms 
var theForm = document.forms['aspnetForm']; 
if (!theForm) { 
theForm = document.aspnetForm; 
} 

// this code disables all form elements 
var elements = theForm.elements; 
for (var i = 0, len = elements.length; i < len; ++i) { 
elements[i].disabled = true; 
} 
2

Su puro Javascript:

var fields = document.getElementById("YOURDIVID").getElementsByTagName('*'); 
for(var i = 0; i < fields.length; i++) 
{ 
    fields[i].disabled = true; 
} 
0

Usted puede hacer esto la manera más fácil mediante el uso de jQuery. Hará esto para todos los elementos de entrada, selección y elementos de texto (incluso si hay más de uno en números de estos tipos).

$("input, select, option, textarea", "#formid").prop('disabled',true);

o puede hacerlo así, pero esto va a desactivar todos los elementos (sólo aquellos elementos sobre los que se puede aplicar).

$("*", "#formid").prop('disabled',true);


discapacitados propiedad puede se aplica a los siguientes elementos:

  • botón
  • conjunto de campos de entrada
  • optgroup
  • opción
  • seleccione
  • área de texto

Sin embargo, su hasta que usted lo haga usted prefiere usar.

Cuestiones relacionadas