Gracias por toda su respuesta. Aún no funciona, así que puede hacerlo funcionar con la función document.ready
Senthil Kumar Bhaskaran
Puede ser útil si publica el fragmento de código que no funciona.
Hooray Im Helping
En realidad, mi codificación está en Rails y mi codificación es <% = foo.add_associated_link ('Agregar correo electrónico', @ project.email.build)%> cuando lo visualizo en el navegador puedo ver el correo electrónico, pero ni siquiera puedo desactivarlo. intentado con codificación como e.preventDefault () pero sin resultado
Senthil Kumar Bhaskaran
Respuestas:
194
Para evitar que un ancla siga lo especificado href, sugeriría usar preventDefault():
Intenté con esos "attr", solo funciona en el elemento de formulario, no en la etiqueta Anchor.
Senthil Kumar Bhaskaran
1
@senthil - preventDefault se considera la forma 'adecuada' de hacer esto, vea mi edición (enlace a otro Q + A)
karim79
En realidad, mi codificación está en Rails y mi codificación es <% = foo.add_associated_link ('Agregar correo electrónico', @ project.email.build)%> cuando lo visualizo en el navegador puedo ver el correo electrónico, pero ni siquiera puedo desactivarlo. intentado con codificación como e.preventDefault () pero sin resultado
Senthil Kumar Bhaskaran
2
¿Cómo puedo revertir $('a.something').on("click", function (e) { e.preventDefault(); });?
ア レ ッ ク ス
2
En desacuerdo, use CSS "eventos de puntero: ninguno;" en cambio, al igual que en otras respuestas.
vitrilo
116
La aplicación en la que estoy trabajando actualmente lo hace con un estilo CSS en combinación con JavaScript.
a.disabled { color:gray;}
Luego, cuando quiera deshabilitar un enlace, llamo
$('thelink').addClass('disabled');
Luego, en el controlador de clics para 'thelink', una etiqueta siempre ejecuto un cheque primero
¿No debería esa última línea decir "return false"?
Prestaul
1
Buena llamada, Prestaul. Cuando estoy vinculado a una etiqueta <a>, estoy usando: <a href="whatever" onclick="return disableLink(this)"> .. luego: function disableLink (node) {if (dojo.hasClass (node, 'disabled') devuelve false; dojo.addClass (nodo, 'disabled'); devuelve true;} .. esto permite hacer clic en el enlace una vez y acción (return true) y luego no permite la acción (devuelve falso).
Neek
Tenga en cuenta que en el controlador probablemente debería usar $ (this) en lugar de $ ("thelink") ya que eso podría cambiar o el usuario podría copiar / pegar fácilmente el código.
Alexis Wilke
2
Sugiero que también agregue 'cursor: predeterminado' al estilo deshabilitado.
Stuart Hallows
40
Encontré una respuesta que me gusta mucho más aquí
Creo que una mejor solución es establecer el atributo de datos deshabilitado y anclar una verificación al hacer clic. De esta manera, podemos deshabilitar temporalmente un ancla hasta que, por ejemplo, el javascript termine con una llamada ajax o algunos cálculos. Si no lo deshabilitamos, podemos hacer clic rápidamente en él varias veces, lo que es indeseable ...
$('a').live('click',function(){var anchor = $(this);if(anchor.data("disabled")){returnfalse;}
anchor.data("disabled","disabled");
$.ajax({
url: url,
data: data,
cache:false,
success:function(json){// when it's done, we enable the anchor again
anchor.removeData("disabled");},
error:function(){// there was an error, enable the anchor
anchor.removeData("disabled");}});returnfalse;});
Además, con los eventos de puntero no necesitará incluir el estado: hover, ya que es un evento de puntero. Solo necesita incluir un selector [deshabilitado].
Nunca especificó realmente cómo deseaba que se desactivaran, o qué causaría la desactivación.
Primero, desea descubrir cómo establecer el valor en deshabilitado, para eso usaría las funciones de atributo de JQuery y hacer que esa función suceda en un evento , como un clic o la carga del documento.
Para situaciones en las que debe colocar texto o contenido html dentro de una etiqueta de anclaje, pero simplemente no desea que se realice ninguna acción cuando se hace clic en ese elemento (como cuando desea que un enlace de paginador esté en estado deshabilitado porque está la página actual), simplemente recorte el href. ;)
<a>3 (current page, I'm totally disabled!)</a>
La respuesta de @ michael-meadows me dio una pista sobre esto, pero todavía estaba abordando escenarios en los que todavía tienes que / estás trabajando con jQuery / JS. En este caso, si tiene control sobre cómo escribir el html en sí mismo, simplemente hacer una x-href de la etiqueta href es todo lo que necesita hacer, ¡entonces la solución es HTML puro!
Otras soluciones sin jQuery finagling que mantienen el href requieren que coloque un # en el href, pero eso hace que la página rebote a la parte superior, y solo quiere que esté simplemente deshabilitado. O dejándolo vacío, pero dependiendo del navegador, eso todavía hace cosas como saltar a la parte superior y, según los IDE, es HTML no válido. Pero aparentemente una aetiqueta es HTML totalmente válido sin HREF.
Por último, podría decir: De acuerdo, ¿por qué no simplemente volcar la etiqueta a por completo? Debido a que a menudo no puede, la aetiqueta se usa para propósitos de estilo en el marco CSS o el control que está usando, como el paginador de Bootstrap:
luego, utilizando jquery, puede hacerlo cuando necesite mostrar texto en lugar de un enlace.
var content = $(".MyLink").text();// or .html()
$(".MyLink").replaceWith("<div>"+ content +"</div>")
De esta manera, simplemente podemos reemplazar la etiqueta de anclaje con una etiqueta div. Esto es mucho más fácil (solo 2 líneas) y semánticamente correcto también (porque no necesitamos un enlace ahora, por lo tanto, no debería tener un enlace)
Respuestas:
Para evitar que un ancla siga lo especificado
href
, sugeriría usarpreventDefault()
:Ver:
http://docs.jquery.com/Events/jQuery.Event#event.preventDefault.28.29
Consulte también esta pregunta anterior sobre SO:
jQuery deshabilita un enlace
fuente
$('a.something').on("click", function (e) { e.preventDefault(); });
?La aplicación en la que estoy trabajando actualmente lo hace con un estilo CSS en combinación con JavaScript.
Luego, cuando quiera deshabilitar un enlace, llamo
Luego, en el controlador de clics para 'thelink', una etiqueta siempre ejecuto un cheque primero
fuente
Encontré una respuesta que me gusta mucho más aquí
Se ve como esto:
La habilitación implicaría establecer el atributo href
Esto le da la apariencia de que el elemento de anclaje se convierte en texto normal y viceversa.
fuente
fuente
Creo que una mejor solución es establecer el atributo de datos deshabilitado y anclar una verificación al hacer clic. De esta manera, podemos deshabilitar temporalmente un ancla hasta que, por ejemplo, el javascript termine con una llamada ajax o algunos cálculos. Si no lo deshabilitamos, podemos hacer clic rápidamente en él varias veces, lo que es indeseable ...
Hice un ejemplo de jsfiddle: http://jsfiddle.net/wgZ59/76/
fuente
La respuesta seleccionada no es buena.
Utilice el estilo CSS de puntero-eventos . (Como sugirió Rashad Annara)
Ver MDN https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events . Es compatible con la mayoría de los navegadores.
La simple adición del atributo "deshabilitado" al ancla hará el trabajo si tiene una regla CSS global como la siguiente:
fuente
Prueba las siguientes líneas
Coz, incluso si deshabilita la
<a>
etiquetahref
funcionará, por lo quehref
también debe eliminarla .Cuando desee habilitar intente debajo de las líneas
fuente
Es tan simple como return false;
ex.
o
fuente
En el archivo css
fuente
Si se llama a este método, la acción predeterminada del evento no se activará.
fuente
Si está tratando de bloquear toda interacción con la página, es posible que desee ver el complemento jQuery BlockUI
fuente
Nunca especificó realmente cómo deseaba que se desactivaran, o qué causaría la desactivación.
Primero, desea descubrir cómo establecer el valor en deshabilitado, para eso usaría las funciones de atributo de JQuery y hacer que esa función suceda en un evento , como un clic o la carga del documento.
fuente
Para situaciones en las que debe colocar texto o contenido html dentro de una etiqueta de anclaje, pero simplemente no desea que se realice ninguna acción cuando se hace clic en ese elemento (como cuando desea que un enlace de paginador esté en estado deshabilitado porque está la página actual), simplemente recorte el href. ;)
La respuesta de @ michael-meadows me dio una pista sobre esto, pero todavía estaba abordando escenarios en los que todavía tienes que / estás trabajando con jQuery / JS. En este caso, si tiene control sobre cómo escribir el html en sí mismo, simplemente hacer una x-href de la etiqueta href es todo lo que necesita hacer, ¡entonces la solución es HTML puro!
Otras soluciones sin jQuery finagling que mantienen el href requieren que coloque un # en el href, pero eso hace que la página rebote a la parte superior, y solo quiere que esté simplemente deshabilitado. O dejándolo vacío, pero dependiendo del navegador, eso todavía hace cosas como saltar a la parte superior y, según los IDE, es HTML no válido. Pero aparentemente una
a
etiqueta es HTML totalmente válido sin HREF.Por último, podría decir: De acuerdo, ¿por qué no simplemente volcar la etiqueta a por completo? Debido a que a menudo no puede, la
a
etiqueta se usa para propósitos de estilo en el marco CSS o el control que está usando, como el paginador de Bootstrap:http://twitter.github.io/bootstrap/components.html#pagination
fuente
Entonces, con una combinación de las respuestas anteriores, se me ocurrió esto.
fuente
Si no necesita que se comporte como una etiqueta de anclaje, preferiría reemplazarlo. Por ejemplo, si su etiqueta de anclaje es como
luego, utilizando jquery, puede hacerlo cuando necesite mostrar texto en lugar de un enlace.
De esta manera, simplemente podemos reemplazar la etiqueta de anclaje con una etiqueta div. Esto es mucho más fácil (solo 2 líneas) y semánticamente correcto también (porque no necesitamos un enlace ahora, por lo tanto, no debería tener un enlace)
fuente
Deshabilitar o habilitar cualquier elemento con la propiedad deshabilitada.
fuente