¿Cuál es la forma más fácil de desactivar/activar botones y enlaces (jQuery + Bootstrap)
A veces utilizo anclas con estilo de botones y a veces sólo utilizo botones. Quiero desactivar las cosas clicks específicas para que:
- Se vean deshabilitados
- Dejen de ser pulsados
¿Cómo puedo hacerlo?
354
3
Botones
Los botones son sencillos de desactivar ya que
disabled
es una propiedad del botón que es manejada por el navegador:idioma: html -->
Para desactivarlas con una función personalizada de jQuery, basta con hacer uso de
fn.extend()
:lenguaje: javascript -->
[Demostración de botones y entradas desactivadas de JSFiddle][2].
De lo contrario, usted's hacer uso de jQuery's
prop()
método:Anchor Tags
Cabe destacar que
disabled
no es una propiedad válida para las etiquetas de anclaje. Por esta razón, Bootstrap utiliza el siguiente estilo en sus elementos.btn
:Observe cómo la propiedad
[disabled]
está orientada así como una clase.disabled
. La clase.disabled
es lo que se necesita para que una etiqueta de anclaje aparezca desactivada.Idioma: html -->
Por supuesto, esto no impedirá que los enlaces funcionen al hacer clic. El enlace anterior nos llevará a http://example.com. Para evitar esto, podemos añadir un simple trozo de código jQuery para apuntar a las etiquetas de anclaje con la clase
disabled
para llamar aevent.preventDefault()
:-- Lenguaje: javascript -->
Podemos alternar la clase
disabled
usandotoggleClass()
:[Demostración de enlace deshabilitado de JSFiddle][8].
Combinado
Podemos entonces extender la función disable anterior para comprobar el tipo de elemento que estamos intentando deshabilitar usando
is()
. De esta manera podemostoggleClass()
si no es un elementoinput
obutton
, o alternar la propiedaddisabled
si lo es:[Demostración completa de JSFiddle][10].
Vale la pena señalar además que la función anterior también funcionará en todos los tipos de entrada.
No se me ocurre una forma más sencilla/fácil ;-)
Uso de etiquetas de anclaje (enlaces) :
Para activar la etiqueta Anchor:
Para desactivar la etiqueta Anchor:
introduzca aquí la descripción de la imagen
@James Donnelly ha proporcionado una respuesta completa que se basa en la ampliación de jQuery con una nueva función. Es una gran idea, así que voy a adaptar su código para que funcione como yo lo necesito.
Extender jQuery
Uso
El código procesará un solo elemento o una lista de elementos.
Los botones y las entradas admiten la propiedad
disabled
y, si se establece comotrue
, se verán deshabilitados (gracias a bootstrap) y no se dispararán al hacer clic.Los anclajes no soportan la propiedad "disabled", por lo que vamos a confiar en la clase "disabled" para hacer que se vean deshabilitados (gracias a bootstrap de nuevo) y enganchar un evento de clic por defecto que impida el clic devolviendo false (no es necesario el
preventDefault
ver aquí).Nota: No es necesario desenganchar este evento cuando se vuelvan a habilitar los anclajes. Basta con eliminar la clase
.disabled
para que funcione.Por supuesto, esto no ayuda si has adjuntado un manejador de clic personalizado al enlace, algo que es muy común cuando se usa bootstrap y jQuery. Así que para lidiar con esto vamos a usar la extensión
isDisabled()
para probar la clase.disabled
, así:Espero que esto ayude a simplificar un poco las cosas.