Debe usar .removeAttr('disabled')
en lugar de .attr('disabled', false)
. También debe cache your jQuery selectors.
Edit: Pensé en esto después del hecho. Es posible que desee "vaciar" el texto que se ha escrito en el campo si lo está deshabilitando, así que agregué un .val('')
, si también deseaba ocultarlo, puede agregar .hide()
y .show()
a los dos casos.
junté this fiddle a mostrar una versión de trabajo:
var $state = $('#state'), $province = $('#province');
$state.change(function() {
if ($state.val() == 'other') {
$province.removeAttr('disabled');
} else {
$province.attr('disabled', 'disabled').val('');
}
}).trigger('change'); // added trigger to calculate initial state
El .trigger('change')
va a "activar" un evento de cambio, funcionando con eficacia la función de una vez mientras enlazarlo. De esta forma, el #province
se desactivará/habilitará según el estado seleccionado en el momento en que se ejecute el código. Sin él, la provincia habría estado disponible incluso si el estado no es "otro" a menos que también haya agregado disabled='disabled'
a la etiqueta <input>
en su html.
¡Gracias! ¿Podría explicar el disparador un poco más? Realmente no entiendo – JeroenEijkhof
@WmasterJ - Agregué un poco de una explicación – gnarf
Gracias gnarf. – JeroenEijkhof