簡體   English   中英

禁用LinkBut​​ton不會禁用javascript中的click事件

[英]Disabling LinkButton doesn't disable the click event in javascript

我想在客戶端站點上禁用LinkButton clink。

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

這會禁用鏈接,但我仍然可以單擊鏈接並執行PostBack。

有什么辦法可以禁用鏈接。

碼:

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

它呈現為一個回發的鏈接......我在新窗口中打開回發頁面。 我想要做的是..當我第一次點擊鏈接時...它將打開一個新頁面,然后它將禁用該鏈接。

我正在做的是... onClick的鏈接我有一個javascript函數..這是這樣的..

在LinkDisable中......

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

當我這樣做...鏈接變灰了......但我仍然能夠點擊它。 我想阻止用戶第二次點擊它。

任何幫助表示贊賞。

如果要禁用鏈接按鈕,只需使用以下代碼即可。

標記

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

C#代碼

this.lnkButton.Attributes.Add("disabled","disabled");

我正在以tvanfosson的回答為基礎。 他使用jQuery的答案效果很好,但是如果你有驗證器,它會讓事情變得混亂。 開始:

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
            } 
        }
    });
});

然后在您的標記中,確保將ClientIDMode設置為Static。

<asp:LinkButton ID="SubmitPaymentLnkBtn" Text=" submit " runat="server" CssClass="BlackBgText" ValidationGroup="PaymentInfo" Font-Size="22px"  onclick="SubmitPaymentLnkBtn_Click" ClientIDMode="Static" />

使用jQuery,您可以在獨立於瀏覽器的情況下執行此操作,方法是替換href或添加搶占並停止跟蹤鏈接的單擊處理程序。

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

要么

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

其中disabled-link類具有一些CSS來更改鏈接的外觀,以便它在視覺上看起來是禁用的。

請注意,如果控件位於命名容器(如GridView或UserControl)中,則必須使用id上的“ends with”選擇器引用該名稱。

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

編輯 :根據您的更新。 試試這個:

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
        }
    });
}); 

在不使用jQuery的情況下禁用鏈接(並將其呈現為普通文本)的最簡單方法是完全刪除它的href屬性。

例如,這里是渲染的鏈接:

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

和所需的JavaScript:

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

這在IE和Firefox中都適用,但您可能希望進行更廣泛的測試。

試試這個。 最簡單的例子

<asp:LinkButton ID="LinkButton6" runat="server" disabled="disabled" OnClientClick="return false;"> Test Button</asp:LinkButton>

這是一個基於您發布的評論的編輯,允許在第一次點擊時跟蹤鏈接按鈕,但不是。

要允許第一次單擊鏈接,而不是在此之后,請在頁面上創建一個變量以跟蹤單擊。

var clicked = 0;

由於鏈接按鈕在前端產生href,你可以這樣做

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

OnClientClick特定於.NET

如果您想在頁面加載后僅在某些情況下執行此操作:

<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;
   }
}

找到了解決方案的人...這些javascript解決方案可以正常工作,但如果你刷新頁面......它將清除變量。

那就是那里的一個錯誤..

使用“userData”找到解決方案...... IE會話數據......真的很酷。

查看此鏈接: http//www.eggheadcafe.com/articles/20010615.asp

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM