Quiero deshabilitar un tintineo LinkButton en el sitio del cliente.

objLinkButton.disabled = true;
// or 
objLinkButton.disabled = -1;

Esto deshabilita el enlace, pero aún puedo hacer clic en el enlace y hacer PostBack.

¿Hay alguna forma de deshabilitar el enlace?

Código:

<asp:linkbutton id="xyz" runat="server"
                onClick="javascript:LinkDisable(this)" ></asp:linkbutton>

Que se muestra como un enlace que hace una devolución de datos ... Estoy abriendo la página de devolución de datos en una nueva ventana. Lo que quiero hacer es ... cuando hago clic en el enlace por primera vez ... se abrirá una nueva página y luego deshabilitará el enlace.

Lo que estoy haciendo es ... onClick de ese enlace Tengo una función de JavaScript ... que es algo como esto ...

En LinkDisable ...

function LinkDisable(obj)
{
obj.disabled = -1;
obj.href = '#';
//Cant return false from here.. otherwise it wont postback...
}

Cuando hago esto ... el enlace se pone gris ... pero todavía puedo hacer clic en él. Quiero evitar que el usuario haga clic en ella por segunda vez.

Cualquier ayuda es apreciada.

3
Ben 16 abr. 2009 a las 06:08

7 respuestas

La mejor respuesta

Encontré la solución chicos ... esta solución de JavaScript funcionará, pero si actualiza la página ... borrará las variables.

Eso es un error allí mismo ...

Encontré la solución usando "userData" ... Datos de sesión de IE ... realmente genial.

Consulte este enlace: http://www.eggheadcafe.com/articles/20010615.asp

0
Ben 22 abr. 2009 a las 08:17

Prueba esto. El ejemplo más simple

<asp:LinkButton ID="LinkButton6" runat="server" disabled="disabled" OnClientClick="return false;"> Test Button</asp:LinkButton>
0
Joy Fernandes 19 feb. 2017 a las 11:45

La forma más sencilla de deshabilitar un enlace (y representarlo como texto normal) sin usar jQuery es eliminar su atributo href por completo.

Por ejemplo, aquí está el enlace representado:

<a id='link1' href="javascript:disableLink('link1');">Click me</a>

Y el JavaScript requerido:

function disableLink(id) {
   document.all[id].removeAttribute('href');
}       

Esto funciona para mí en IE y Firefox, pero es posible que desee hacer algunas pruebas más exhaustivas.

1
codemonkeh 16 abr. 2009 a las 04:01

Si desea deshabilitar un botón de enlace, simplemente use el siguiente código.

Marcado

<asp:LinkButton ID="lnkButton" Text="Submit" runat="server">
</asp:LinkButton>

Código C #

this.lnkButton.Attributes.Add("disabled","disabled");
2
Community 23 feb. 2017 a las 00:17

Esta es una edición basada en el comentario que publicó para permitir que se siga el botón de enlace en el primer clic, pero no de otra manera.

Para permitir que se haga clic en el enlace la primera vez, pero no después de eso, cree una variable en la página para realizar un seguimiento del clic.

var clicked = 0;

Dado que los botones de enlace producen hrefs en la parte frontal, puede hacer esto

<a href="#" OnClientClick="return false"></a>

OnClientClick es específica de .NET

Si desea hacerlo después de que la página se cargue solo en ciertas situaciones:

<a href="" id="linkbutton">

var linkbutton = document.getElementById("linkbutton");
linkbutton.onclick = function(){
   if(clicked != 0){
      //if other than 0, not followed
      return false;
   }
   else{
      //link is followed here since it's the first time it's being clicked and clicked value = 0
      clicked = clicked + 1;
   }
}
0
DLS 16 abr. 2009 a las 04:29

Estoy aprovechando la respuesta de tvanfosson . Su respuesta usando jQuery funciona bien, pero si tiene validadores, arruina las cosas. Aquí va:

var code = null;
$(document).ready(function () {
    var button = $('#SubmitPaymentLnkBtn');
    code = button.attr('href').replace(/javascript:/, ''); 
    button.attr('href', '#'); // replace postback function
    button.click(function () {
        if (Page_ClientValidate('PaymentInfo')) {
                           // now only runs if above validationGroup is valid
            $(this).unbind('click'); 
            if (code) {
                $(this).addClass('disabled-btn');
                eval(code);  // do post back
            } 
        }
    });
});

Luego, en su marcado, asegúrese de configurar ClientIDMode en Estática.

<asp:LinkButton ID="SubmitPaymentLnkBtn" Text=" submit " runat="server" CssClass="BlackBgText" ValidationGroup="PaymentInfo" Font-Size="22px"  onclick="SubmitPaymentLnkBtn_Click" ClientIDMode="Static" />
1
James Reategui 18 abr. 2011 a las 00:40

Con jQuery puede hacer esto en un navegador independiente, ya sea reemplazando el href o agregando un controlador de clics que se adelanta y detiene el enlace que se sigue.

$('#objLinkButton').attr('href','#').addClass('disabled-link');

O

$('#objLinkButton').click( function() { return false; } )
                   .addClass('disabled-link');

Donde la clase disabled-link tiene algo de CSS para cambiar el aspecto del enlace para que se vea deshabilitado visualmente.

Tenga en cuenta que si esto es así si el control está dentro de un contenedor de nombres (como un GridView o UserControl), tendrá que hacer referencia al nombre utilizando el selector "que termina con" en la identificación.

$('id$="objLinkButton"')...

EDITAR : según su actualización. Prueba esto:

var code = null;
$(document).ready( function() {
    var button = $('#objLinkButton');
    code = button.attr('href').replace(/javascript:/,''); // save postback function
    button.attr('href','#'); // replace postback function
    button.click( function() {
        $(this).unbind('click'); // get rid of click handler so it only fires once
        if (code) { // if link hasn't been used
            eval(code);  // do post back
        }
    });
}); 
1
tvanfosson 16 abr. 2009 a las 04:53