A veces uso anclas con estilo como botones y otras solo uso botones. Quiero deshabilitar cosas específicas para que:
- Se ven discapacitados
- Dejan de ser cliqueados
¿Cómo puedo hacer esto?
jquery
html
css
twitter-bootstrap
biofractal
fuente
fuente
role="button"
para enlaces, pero eso no parece afectar este problema. getbootstrap.com/css/#buttonsa.btn[disabled]
aparecido deshabilitado pero seguir haciendo clic es un error en Bootstrap IMO. El atributo[disabled]
solo debe aparecer deshabilitado parabutton
yinput
.Respuestas:
Botones
Los botones son fáciles de deshabilitar, ya que
disabled
es una propiedad del botón que maneja el navegador:Para deshabilitarlos con una función jQuery personalizada, simplemente usaría
fn.extend()
:Botón deshabilitado JSFiddle y demo de entrada .
De lo contrario, utilizaría el
prop()
método de jQuery :Etiquetas de anclaje
Vale la pena señalar que
disabled
no es una propiedad válida para las etiquetas de anclaje. Por esta razón, Bootstrap usa el siguiente estilo en sus.btn
elementos:Tenga en cuenta cómo
[disabled]
se orienta la propiedad, así como una.disabled
clase. La.disabled
clase es lo que se necesita para que una etiqueta de anclaje parezca deshabilitada.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 agregar una pieza simple de código jQuery para dirigir las etiquetas de anclaje con la
disabled
clase a la que llamarevent.preventDefault()
:Podemos alternar la
disabled
clase usandotoggleClass()
:JSFiddle deshabilitó la demostración del enlace .
Conjunto
Luego, podemos extender la función de deshabilitación anterior hecha anteriormente para verificar el tipo de elemento que estamos intentando deshabilitar
is()
. De esta manera podemostoggleClass()
si no es unainput
obutton
elemento, o alternar ladisabled
propiedad si se trata de:Demo combinada completa de JSFiddle .
Vale la pena señalar que la función anterior también funcionará en todos los tipos de entrada.
fuente
return false if $(@).prop('disabled')
controladores de clics personalizados? Sin esa línea, esos controladores se ejecutan independientemente.disabled
no es una propiedad válida de etiqueta de anclaje, por lo que no debería usarse. El evento de clic que he dado se basa en la.disabled
clase, pero lo que se puede utilizar eshasClass('disabled')
- si eso es cierto,preventDefault
.disabled
propiedad en el ancla? Es un objeto dinámico, así que solo puedo configurarlo y usarlo, como si estuviera extendiendo el conjunto de características del ancla. He actualizado mi respuesta a continuación para mostrar esto. ¿Qué piensas? ¿Es malo? Además, usted tiene que.off()
elpreventDefault
evento de clic cuando se vuelva a habilitar un enlace?disabled
propiedad personalizada , puede utilizar losdata-*
atributos . Como Bootstrap ya aplica los mismosdisabled
estilos de propiedad,class="disabled"
también puedes confiar en la clase.preventDefault
todos los eventos de clic de anclaje, tendré que separarlos cuando se vuelva a habilitar el enlace. ¿O estoy malinterpretando algo?¡No puedo pensar de una manera más simple / fácil! ;-)
Uso de etiquetas de anclaje (enlaces):
Para habilitar la etiqueta de anclaje:
Para deshabilitar la etiqueta de anclaje:
fuente
Supongamos que tiene un campo de texto y un botón de enviar,
Deshabilitante:
Para deshabilitar cualquier botón, por ejemplo, el botón enviar solo necesita agregar el atributo deshabilitado como
Después de ejecutar la línea anterior, su etiqueta html de botón de envío se vería así:
Observe que se ha agregado el atributo 'deshabilitado' .
Habilitación:
Para habilitar el botón, como cuando tiene texto en el campo de texto. Deberá eliminar el atributo de desactivación para habilitar el botón como,
Ahora el código anterior eliminará el atributo 'deshabilitado'.
fuente
Sé que llego tarde a la fiesta, pero específicamente para responder las dos preguntas:
"Solo quiero deshabilitar cosas específicas para que:
¿Qué tan difícil puede ser esto?
Dejan de hacer clic
1. Para los botones gusta
<button>
o<input type="button">
que añadir el atributo:disabled
.2. Para enlaces, CUALQUIER enlace ... en realidad, cualquier elemento HTML, puede usar eventos de puntero CSS3 .
El soporte del navegador para eventos de puntero es impresionante por el estado actual de la técnica (5/12/14). Pero generalmente tenemos que admitir navegadores heredados en el ámbito de IE, por lo que IE10 y versiones inferiores NO admiten eventos de puntero: http://caniuse.com/pointer-events . Por lo tanto, usar una de las soluciones de JavaScript mencionadas por otros aquí puede ser el camino a seguir para los navegadores heredados.
Más información sobre eventos de puntero:
Se ven discapacitados
Obviamente esta es una respuesta CSS, entonces:
1. Para botones como
<button>
o<input type="button">
use el[attribute]
selector:-
Aquí hay una demostración básica con las cosas que mencioné aquí: http://jsfiddle.net/bXm5B/4/
Espero que esto ayude.
fuente
Si, como yo, solo desea deshabilitar un botón, no se pierda la respuesta simple sutilmente oculta en este largo hilo:
fuente
@James Donnelly ha proporcionado una respuesta integral que se basa en extender jQuery con una nueva función. Esa es una gran idea, así que voy a adaptar su código para que funcione como lo necesito.
Extendiendo jQuery
Uso
El código procesará un solo elemento o una lista de elementos.
Los botones y las entradas admiten la
disabled
propiedad y, si se configurantrue
, se verán deshabilitados (gracias a bootstrap) y no se activarán al hacer clic.Los anclajes no admiten la propiedad deshabilitada, por lo que confiaremos en la
.disabled
clase para que se vean deshabilitados (gracias a bootstrap nuevamente) y conectemos un evento de clic predeterminado que evite que el clic regrese falso (no es necesariopreventDefault
verlo aquí ) .Nota : No es necesario desenganchar este evento al volver a habilitar los anclajes. Simplemente eliminar la
.disabled
clase hace el truco.Por supuesto, esto no ayuda si ha adjuntado un controlador de clic personalizado al enlace, algo que es muy común al usar bootstrap y jQuery. Entonces, para lidiar con esto, vamos a usar la
isDisabled()
extensión para probar la.disabled
clase, así:Espero que eso ayude a simplificar un poco las cosas.
fuente
Tenga en cuenta que hay un problema extraño si está utilizando los botones JS de Bootstrap y el estado de "carga". No sé por qué sucede esto, pero he aquí cómo solucionarlo.
Digamos que tiene un botón y lo configura en el estado de carga:
Ahora desea sacarlo del estado de carga, pero también deshabilitarlo (por ejemplo, el botón era un botón Guardar, el estado de carga indicaba una validación continua y la validación falló). Esto parece razonable Bootstrap JS:
Desafortunadamente, eso restablecerá el botón, pero no lo deshabilitará. Al parecer,
button()
realiza alguna tarea retrasada. Entonces también tendrás que posponer tu inhabilitación:Un poco molesto, pero es un patrón que estoy usando mucho.
fuente
Gran respuesta y contribuciones de todos! Tuve que extender esta función ligeramente para incluir la desactivación de elementos seleccionados:
Parece estar trabajando para mí. ¡Gracias a todos!
fuente
Para ese tipo de comportamiento, siempre uso el
button
widget jQueryUI , lo uso para enlaces y botones.Defina la etiqueta en HTML:
Use jQuery para inicializar los botones:
Use los
button
métodos del widget para deshabilitarlos / habilitarlos:Eso se encargará del comportamiento del botón y el cursor, pero si necesita profundizar y cambiar el estilo del botón cuando está deshabilitado, sobrescriba las siguientes clases CSS dentro del archivo de estilo CSS de su página.
Pero recuerde: esas clases CSS (si se cambian) también cambiarán el estilo de otros widgets.
fuente
Lo siguiente me ha funcionado muy bien:
fuente
Esta es una respuesta bastante tardía, sin embargo, me topé con esta pregunta mientras buscaba una forma de deshabilitar los botones de arranque después de hacer clic en ellos y tal vez agregar un buen efecto (por ejemplo, un spinner). He encontrado una gran biblioteca que hace exactamente eso:
http://msurguy.github.io/ladda-bootstrap/
Solo incluye los css y js requeridos, agrega algunas propiedades a tus botones y habilita lada con javascript ... ¡Presto! ¡Sus botones tienen una nueva vida (por favor revise la demostración para ver qué hermoso es)!
fuente
Lo anterior no funciona porque a veces
ajusta tu código con
fuente
Sé que mi respuesta llega tarde, pero en mi opinión, esta es la forma más fácil de alternar un botón 'habilitar' y un botón 'deshabilitar'
fuente
Supongamos que tiene estos botones en la página como:
El código js:
fuente
Digamos que tiene ese aspecto que está habilitado actualmente.
Solo agrega esto:
y obtendrás esto que deshabilitará el botón
fuente
disabled
propiedad no es una propiedad válida para etiquetas de anclaje.Si desea deshabilitar los clics, también puede agregar esto en línea en html
fuente