Pregunta

Considere el siguiente código:

$("a").attr("disabled", "disabled");

En IE y FF, esto hará que los anclajes no se puedan hacer clic, pero en los navegadores basados ??en WebKit (Google Chrome y Safari) esto no hace nada. Lo bueno del atributo deshabilitado es que se elimina fácilmente y no afecta a los atributos href y onclick.

¿Tiene alguna sugerencia sobre cómo obtener el resultado deseado? Las respuestas deben ser:

  • Ser revertable fácilmente, ya que quiero deshabilitar los controles de entrada de formulario mientras tengo una llamada AJAX en ejecución.
  • Debe funcionar en IE, FF y WebKit
¿Fue útil?

Solución

Supongo que tienes un controlador de eventos onclick vinculado a estos elementos de anclaje. Simplemente haga que su controlador de eventos verifique " inhabilitado " atribuir y cancelar el evento si está configurado. Su controlador de eventos se vería así:

$("a").click(function(event){
  if (this.disabled) {
    event.preventDefault();
  } else {
    // make your AJAX call or whatever else you want
  }
});

También puede establecer una regla de hoja de estilo para cambiar el cursor.

a[disabled=disabled] { cursor: wait; }

Editar: simplificó el " inhabilitado " Compruebe como se sugiere en los comentarios.

Otros consejos

Tuve que corregir este comportamiento en un sitio con una gran cantidad de anclajes que estaban siendo habilitados / deshabilitados con este atributo de acuerdo con otras condiciones, etc. Tal vez no sea lo ideal, pero en una situación como esa, si prefieres no arreglarlo Cada código de anclaje individualmente, esto hará el truco para todos los anclajes:

$('a').each(function () {
    $(this).click(function (e) {
        if ($(this).attr('disabled')) {
            e.preventDefault();
            e.stopImmediatePropagation();
        }
    });
    var events = $._data ? $._data(this, 'events') : $(this).data('events');
    events.click.splice(0, 0, events.click.pop());
});

Y:

a[disabled] {
    color: gray;
    text-decoration: none;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top