Tengo que deshabilitar las entradas al principio y luego al hacer clic en un enlace para habilitarlas.
Esto es lo que he intentado hasta ahora, pero no funciona.
HTML:
<input type="text" disabled="disabled" class="inputDisabled" value="">
jQuery:
$("#edit").click(function(event){
event.preventDefault();
$('.inputDisabled').removeAttr("disabled")
});
Esto me muestra true
y luego, false
pero nada cambia para las entradas:
$("#edit").click(function(event){
alert('');
event.preventDefault();
alert($('.inputDisabled').attr('disabled'));
$('.inputDisabled').removeAttr("disabled");
alert($('.inputDisabled').attr('disabled'));
});
javascript
jquery
disabled-input
fatiDev
fuente
fuente
Respuestas:
Siempre use el
prop()
método para habilitar o deshabilitar elementos cuando use jQuery (vea a continuación por qué).En su caso, sería:
Ejemplo de jsFiddle aquí.
Básicamente,
prop()
se debe utilizar cuando obtener o establecer propiedades (comoautoplay
,checked
,disabled
yrequired
, entre otros).Al usar
removeAttr()
, está eliminando completamente eldisabled
atributo en sí mismo, mientrasprop()
que simplemente está configurando el valor booleano subyacente de la propiedad en falso.Si bien lo que desea hacer se puede hacer con
attr()
/removeAttr()
, no significa que se deba hacer (y puede causar un comportamiento extraño / problemático, como en este caso).Los siguientes extractos (tomados de la documentación de jQuery para prop () ) explican estos puntos con mayor detalle:
fuente
attr
versusprop
para casillas de verificación: w3.org/TR/html5/forms.html#concept-input-checked-dirty excepto para jQuery interno Solución alternativa mágica..prop()
se ejecutó en el elemento señalado porthis
(this.prop("disabled", false)
pero al estar en una devolución de llamada estaba vinculado al elemento incorrecto, así que tuve que hacer lavar that = this
solución común . Intentar jugar con.apply()
/.call()
no funcionaba bien; no sé por qué. Verifique con unconsole.log(this)
si está configurado para su objeto deseado, justo antes de llamarthis.prop(...)
disabled
propiedad deshabilitará el elemento. Por ejemplo, tener una<button disabled="false"></button>
voluntad no habilitará el botón, la propiedad debe ser eliminada. Al llamar a$('button').prop('disabled', false);
jQuery eliminará la propiedad por usted, como lo observé en este código (inspeccione para ver la eliminación de la propiedad).http://jsfiddle.net/ZwHfY/
fuente
para eliminar el uso de atributos deshabilitados,
y para agregar el uso de atributos deshabilitados,
Disfruta :)
fuente
Usar así,
HTML:
JS:
fuente
<a>
, en el que.prop('disabled', false)
no funciona. Lo cambié a a<button>
y funciona ahoraCreo que está intentando alternar el estado deshabilitado, en caso de que deba usar esto (de esta pregunta ):
Aquí hay un violín que funciona.
fuente
Pensé que esto puede configurar fácilmente
fuente
Este fue el único código que funcionó para mí:
Tenga en cuenta que es
removeProp
y noremoveAttr
.Estoy usando
jQuery 2.1.3
aquifuente
2018, sin JQuery
Sé que la pregunta es sobre JQuery: esta respuesta es solo para su información.
fuente
Esta pregunta menciona específicamente jQuery, pero si está buscando lograr esto sin jQuery, el equivalente en JavaScript vainilla es:
fuente
elem.removeAttr('disabled');
funciona para mí