Etiqueta href deshabilitada

266

Aunque ese enlace está desactivado, aún se puede hacer clic en él.

<a href="/" disabled="disabled">123n</a>

¿Puedo hacer que no se pueda hacer clic si está deshabilitado? ¿Debo usar JavaScript necesariamente?

Alan Coromano
fuente
Solo para aclarar: supongo que lo que quieres decir es que has deshabilitado el enlace pero el evento "clic" aún se dispara.
Levi Hackwith
2
Puede usar los eventos de puntero: ninguno; en css
ppsreejith
3
Puede usar preventDefault (); stackoverflow.com/questions/1357118/…
Ciack404
Pero, ¿por qué no simplemente eliminar el atributo href?
MrBoJangles

Respuestas:

234

No hay atributo deshabilitado para hipervínculos. Si no desea que algo esté vinculado, deberá eliminar la <a>etiqueta por completo o eliminar su hrefatributo.

John Conde
fuente
13
Esto funciona, pero lo consideraría un UX malo si deja el CSS existente en él. El usuario hará clic en él y pensará que algo está roto. Nunca debe permitir que el usuario se confunda sobre lo que está sucediendo.
agm1984
Solo agregando cursor: ninguno; al enlace relevante parece lograr tanto como el cursor: ninguno; eventos de puntero: ninguno; . . . . En cualquier caso, está permitiendo un cambio de página en un sitio de aplicación de una sola página para mí.
Tronco
2
El enlace aún podría enfocarse y "hacer clic" (usando Enter) usando la navegación del teclado incluso si usa el cursor CSS o los eventos de puntero, lo que probablemente sea malo si está tratando de deshabilitar algo. Elimine el atributo href o conviértalo en un span
Tom Golden el
3
También puede agregar onclick="return false;"a la etiqueta de anclaje y quizás agregar un titleatributo que explique que el enlace no es válido.
Craig London
1
Además, creo que simplemente limpiar el hrefy dejar el <a>no sería compatible con ADA.
SlothFriend
353

Con la ayuda de CSS, deshabilitará el hipervínculo. Prueba lo siguiente

a.disabled {
  pointer-events: none;
  cursor: default;
}
<a href="link.html" class="disabled">Link</a>

Lakhan
fuente
44
Tenga en cuenta que esto solo funciona en Internet Explorer 11+
Patrick Hillert
31
Cuando se centre en la etiqueta de enlace con la tecla de tabulación y presione Entrar, esta propiedad no funciona.
Majid Basirati
2
Solo debería ser la respuesta si no te importa IE9-10
Ringo
1
Esto también deshabilita el evento de desplazamiento, lo que significa que el estilo del cursor no funciona. (<span> & # x20E0; </span> <- nada de esto en su enlace deshabilitado.)
Seth Battin
2
También use opacidad para diferenciar entre enlaces activos y deshabilitados. opacity: 0.5;
Aamer Shahzad
84

Puedes usar:

<a href="/" onclick="return false;">123n</a>
CodeLikeBeaker
fuente
2
no funcionará si ya existe una función como controlador para el evento de clic
rahul shukla
70

Puede usar una de estas soluciones:

HTML

<a>link</a>

JavaScript

<a href="javascript:function() { return false; }">link</a>
<a href="/" onclick="return false;">link</a>

CSS

<a href="www.page.com" disabled="disabled">link</a>

<style type="text/css">
    a[disabled="disabled"] {
        pointer-events: none;
    }
</style>

IgniteCoders
fuente
32

Prueba esto:

<a href="javascript:void(0)" style="cursor: default;">123n</a>

fuente
Correcto, siempre uso href = "javascript: void (0)"
Jan Hamara
Esto también es un buen toque, si aún desea conservar la función de hacer clic derecho como "copiar enlace"
Desarrollador SPM
18

La <a>etiqueta no tiene un disabledatributo, eso es solo para <input>s ( <select>ys y <textarea>s).

Para "deshabilitar" un enlace, puede eliminar su hrefatributo o agregar un controlador de clics que devuelva falso.

Cohete Hazmat
fuente
@rocket ¿Hay alguna implicación de eliminar el atributo href? Quiero decir, se supone que es un atributo obligatorio. No es que ese tipo de cosas parezca importar mucho hoy en día.
Ringo
@Ringo: al eliminar el hrefpuede hacer que el cursor no cambie cuando pasa el cursor sobre él.
Rocket Hazmat
11

Debe eliminar la <a>etiqueta para deshacerse de esto.

o intente usar: -

  <a href="/" onclick="return false;">123n</a>
Rahul Tripathi
fuente
10

HTML:

<a href="/" class="btn-disabled" disabled="disabled">123n</a>

CSS:

.btn-disabled,
.btn-disabled[disabled] {
  opacity: .4;
  cursor: default !important;
  pointer-events: none;
}
Syed
fuente
10

Consejos 1: uso de CSS pointer-events: none;

Consejos 2: Uso de JavaScript javascript:void(0) (esta es una práctica recomendada)

<a href="javascript:void(0)"></a>

Consejos 1: Usando Jquery $('selector').attr("disabled","disabled");

venkatskpi
fuente
9

Solo CSS: esto elimina el enlace de href.

.disable { 
    pointer-events: none; 
    cursor: default; 
}
Joel Adams
fuente
5

Dejar que un padre tenga pointer-events: nonedeshabilitará al niño de a-tagesta manera (requiere que el div cubra el a y no tenga 0 ancho / alto):

<div class="disabled">
   <a href="/"></a>
</div>

dónde:

.disabled {
    pointer-events: none;
}
Ferus
fuente
También puede aplicar el estilo "pointer-events: none" directamente a la etiqueta <a>, por ejemplo, agregando la clase .disabled con javascript cuando desee deshabilitarla. Una envoltura <div> no es necesaria.
Les Nightingill
No se requiere envoltura como se muestra aquí: https://jsfiddle.net/d1owm1d0/1/ para Chrome, Firefox y Safari. ¿Estás usando un navegador diferente donde falla mi demo?
Les Nightingill
@LesNightingill Si la etiqueta a envuelve algo, no funciona: jsfiddle.net/d9gwgdyf
Ferus
eso es correcto @Ferus. No estoy seguro de por qué eso es cierto.
Les Nightingill
4
$(document).ready(function() {
   $('a').click(function(e) {
     e.preventDefault();
  });
});
Mahmoud Farahat
fuente
1
Este código funciona con un clic derecho, por lo que no es una solución exacta.
Lakhan
4

puedes deshabilitar el enlace usando javascript en tiempo de ejecución usando este código

$ ('. page-link'). css ("eventos de puntero", "ninguno");

Chintan Mathukiya
fuente
Tarde a la fiesta, pero esto también elimina cualquier cursor css. En mi caso, uso el "cursor: no permitido" si un enlace está deshabilitado.
Steve
3

Si desea deshacerse del puntero, puede hacerlo con CSS usando el cursor .

ahdaniels
fuente
3

Puede emular el atributo deshabilitado en una <a>etiqueta.

<a href="link.html" disabled="">Link</a>

a[disabled] {
   pointer-events: none;
   cursor: default;
}
Blowsie
fuente
3

En mi caso, yo uso

<a href="/" onClick={e => e.preventDefault()}>
Chien Chieh Wang
fuente
3

Tengo uno:

<a href="#">This is a disabled tag.</a>

Espero que te ayude ;)


fuente
1
Hola Werenverlivitz, bienvenido. ¡Bien, no pensé que serías la primera persona con esa respuesta 7-8 años después!
Tiago Martins Peres 李大仁
2

No podemos desactivarlo directamente, pero podemos hacer lo siguiente

  1. agregar type="button".
  2. eliminar el href=""atributo
  3. agregue el disabledatributo para que muestre que está deshabilitado al cambiar el curso y se atenúa.

el siguiente es un ejemplo

<?php
if($status=="Approved"){ 
?>
  <a type="button" class="btn btn-primary btn-xs" disabled> EDIT
     </a>
  <?php    
}else{
?>
  <a href="index.php" class="btn btn-primary btn-xs"> EDIT
    </a>
  <?php    
}
?>
Assaad Lutf
fuente
2

Pude lograr el resultado deseado usando una operación ng-href ternary

<a ng-href="{{[condition] ? '' : '/'}}" ng-class="{'is-disabled':[condition]}">123n</a>

dónde

a.is-disabled{
   color: grey;
   cursor: default;

   &:hover {
      text-decoration: none;
   }
} 
Corey Webster
fuente
1

Use botones y enlaces correctamente.

• Los botones activan la funcionalidad programada en una página web (cuadros de diálogo, regiones expandidas / contraídas).

• Los enlaces lo llevan a otra ubicación, ya sea a una página diferente o a una ubicación diferente en la misma página.

Si sigue estas reglas, no habrá ningún escenario cuando necesite deshabilitar un enlace. Incluso si hace que un enlace se vea visualmente deshabilitado y en blanco al hacer clic

<a href="" ng-click="Ctrl._isLinkActive && $ctrl.gotoMyAwesomePage()"

No considerará la accesibilidad y los lectores de pantalla lo leerán como un enlace y las personas con discapacidad visual seguirán preguntándose por qué el enlace no funciona.

Sengupta Amit
fuente
1

Si está utilizando WordPress, creé un complemento que puede hacer esto y mucho más sin necesidad de saber cómo codificar nada. Todo lo que necesita hacer es agregar el selector de los enlaces que desea deshabilitar y luego elegir "Deshabilitar todos los enlaces con este selector en una nueva pestaña". desde el menú desplegable que aparece y haga clic en actualizar.

Haga clic aquí para ver un gif que demuestra esto

Puede obtener la versión gratuita del repositorio de plugins de WordPress.org para probarla.

Chris Marabate
fuente
1

Aquí hay varias formas de deshabilitar la etiqueta a:

<a >Link Text</a> remove the href from your anchor tag
<a href=”javascript:void(0)”/>Link text</a> put javascript:void(0) in href
<a href="/" onclick="return false;">Link text</a> using return false

Como no hay atributos deshabilitados para la etiqueta de anclaje. Si desea detener el comportamiento de la etiqueta de anclaje dentro de una función jQuery, puede usar la línea siguiente al comienzo de la función:

$( "a" ).click(function( e ) {
e.preventDefault();
$( "<div>" )
.append( "default " + e.type + " prevented" )
.appendTo( "#log" );
});

event.preventDefault ()

Mahak Choudhary
fuente
1

Veo que ya hay un montón de respuestas publicadas aquí, pero no creo que haya ninguna clara todavía que combine los enfoques ya mencionados en el que he encontrado que funciona. Esto es para que el enlace parezca deshabilitado y no redirigir al usuario a otra página.

Esta respuesta asume que está utilizando jquery y bootstrap , y usa otra propiedad para almacenar temporalmente la hrefpropiedad mientras está deshabilitada.

//situation where link enable/disable should be toggled
function toggle_links(enable) {
    if (enable) {
        $('.toggle-link')
        .removeClass('disabled')
        .prop('href', $(this).attr('data-href'))
    }
    else {
        $('.toggle-link')
        .addClass('disabled')
        .prop('data-href', $(this).prop('href'))
        .prop('href','#')
    }
a.disabled {
  cursor: default;
}
Owengall
fuente
0

Cualquier cosa en la etiqueta href se mostrará en la esquina inferior izquierda de la ventana del navegador cuando pase el mouse sobre ella.

Personalmente, creo que tener algo como javascript: void (0) muestra al usuario es horrible.

En cambio, deje href apagado, haga su magia con jQuery / lo que sea y agregue una regla de estilo (si aún necesita que parezca un enlace):

a {
    cursor:pointer;
}
Enigma Plus
fuente
0

La mejor respuesta es siempre la más simple. No hay necesidad de ninguna codificación.

Si la etiqueta de anclaje (a) no tiene atributo href, solo es un marcador de posición para un hipervínculo. ¡Compatible con todos los navegadores!

<a href="/">free web counters</a><br  />
<a "/">free web counters</a>

Intergaláctico
fuente
-1

Puede deshabilitar las etiquetas de anclaje devolviendo falso. En mi caso, estoy usando angular y ng-disabled para un acordeón Jquery y necesito desactivar las secciones.

Así que creé un pequeño fragmento de js para arreglar esto.

       <a class="opener" data-toggle="collapse"
                   data-parent="#shipping-detail"
                   id="shipping-detail-section"
                   href="#shipping-address"
                   aria-expanded="true"
                   ng-disabled="checkoutState.addressSec">
                   Shipping Address</a>
     <script>
          $("a.opener").on("click", function () {
           var disabled = $(this).attr("disabled");
           if (disabled === 'disabled') {
            return false;
           }
           });
     </script>
Darryl Windsor
fuente
-1

si solo desea deshabilitar temporalmente el enlace pero dejar el href allí para habilitarlo más tarde (que es lo que quería hacer), descubrí que todos los navegadores usan el primer href. Por lo tanto pude hacer:

<a class="ea-link" href="javascript:void(0)" href="/export/">Export</a>
Angus Walker
fuente
Este es HTML no válido, como se describe en stackoverflow.com/q/26341507/1709587 . Si su motivación es solo mantener el href en su código fuente para que sea fácil editar su fuente más tarde para restaurarlo, hay formas de hacerlo que no implican violar la especificación, como usar un comentario. Recomiendo no escribir HTML inválido como este sin una razón sólida para hacerlo.
Mark Amery
-1

Variante que me conviene:

<script>
  function locker(){
    if ($("a").hasClass("locked")) {
         $("a").removeClass('locked').addClass('unlocked');
         $("a").attr("onClick","return false");
    } else {
         $("a").css("onclick","true");
         $("a").removeClass('unlocked').addClass('locked');
         $("a").attr("onClick","");
    }
  }
</script>

<button onclick="locker()">unlock</button>

<a href="http://some.site.com" class="locked">
  <div> 
      .... 
  <div>
</a>
Camada
fuente
-1

<a href="/" disabled="true" onclick="return false">123</a>

Solo agregando: Esto funciona en general, sin embargo, no funcionará si el usuario ha deshabilitado JavaScript en el navegador.

1) Opcionalmente, puede usar la clase Bootstrap 3 en su etiqueta de anclaje para deshabilitar la etiqueta href, después de integrar el complemento bootstrap 3 do

<a href="/" class="btn btn-primary disabled">123n</a>

O

2) Aprenda cómo habilitar javascript usando html o js en los navegadores. o cree un usuario emergente que le permita habilitar javascript antes de usar el sitio web

OlaJ
fuente