2009-04-16 11 views
3

クライアントサイトでLinkButtonのクリンクを無効にしたいとします。LinkBut​​tonを無効にしてもJavaScriptのクリックイベントは無効になりません。

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

これでリンクが無効になりますが、リンクをクリックしてポストバックを実行できます。

リンクを無効にする方法はありますか。

コード:

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

私はこれを行います。リンクが灰色になってしまった...しかし、私はまだそれをクリックすることができます。ユーザーが2回目にクリックしないようにしたい。

何か助けていただければ幸いです。

+0

コードサンプルを提供できますか? – bendewey

答えて

0

解決策のユーザーが見つかりました。これらのjavascriptソリューションは動作しますが、ページを更新すると... varaiblesがクリアされます。

だからすぐそこにバグのthats ..

はそれが本当にクールな... IEセッションデータ... "のuserData" を使用して解決策を見つけました。

チェックアウトこのリンク:http://www.eggheadcafe.com/articles/20010615.asp

0

これは、最初のクリックでリンクボタンを実行できるように投稿したコメントに基づいて編集されますが、それ以外は編集されません。

初めてリンクをクリックできるようにするには、そのリンクをクリックしないようにするには、クリックを追跡するためにページに変数を作成します。

var clicked = 0; 

linkbuttonsは、フロントエンドでの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; 
    } 
} 
+0

お返事ありがとうございます。これは、初めての場合でもリンクをクリックすることができないためです。リンクを最初にクリックして新しいウィンドウでリンクを開くようにします。 2回目のクリック後、無効にしたい、つまりクリックできないようにしたい。 – Ben

+0

こんにちはDhana、 このソリューションは、リンクがLinkBut​​tonによって作成されたときではなく、通常のリンクで機能します。何が起こるか..リンクバックの場合、ポストバックを行います。 このような状況では、ポストバックを行うたびにトラックを保持するために使用する変数がリセットされます。この場合、サーバーコードに触れることはできません。 – Ben

+0

私はポストバックの事を忘れてしまった!もう一つの邪魔をする方法は、それを永続的なクッキーに割り当てることです。 – Dhana

1

jQueryを使用すると、 hrefを置き換えるか、それに続くリンクをプリエンプトして停止するクリックハンドラを追加します。 disabled-linkクラスは、それは視覚障害者に見えるようにリンクの外観を変更するには、いくつかのCSSを持って

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

または

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

コントロールがネーミングコンテナ(GridViewやUserControlなど)の内部にある場合は、idの「ending with」セレクタを使用して名前を参照する必要があることに注意してください。

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

EDIT:あなたの更新に基づいています。リンクを無効にする(通常のテキストのようにそれをレンダリングする)はjQueryを使用せずにする最も簡単な方法は、それが完全にhref属性だ削除することです

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

ありがとうございます。しかし、私は基本的な解決策が必要です。今のところJqueryを使用していません。私は星にする必要があります – Ben

+1

あなたはjQueryなしでこれを行うことができますが、率直に言ってjQueryはかなり基本的なもので、他のものはjQueryの一部を再実装するだけです。いったんあなたは少しjavascriptを持っていて、それをブラウザ中立にしようとすると、あなたは少しでも学習してフレームワークを使うことができます。 – tvanfosson

+0

私はあなたのポイントtavnfossonを理解しています。あなたの助けに感謝。 私はまだこの問題を解決する方法を見つけることはできません..単に無効にし、それを私のために働いていない偽の戻り値を作ること..私は初めてリンクをクリックして無効にする必要があります。 私は何とか修正しようとしています...今のところ、修正内容はわかりません – Ben

1

:これを試してみてください。例えば

ここでは、レンダリングされたリンクです:

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

そして、必要なJavaScript:

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

これはIEとFirefoxの両方で私のために動作しますが、あなたには、いくつかのより広範行いたいことテスト。

1

私は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" /> 
2

リンクボタンを無効にするには、次のコードを使用します。

マークアップ

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

C#コード

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

これを試してみてください。最も単純な例

<asp:LinkButton ID="LinkButton6" runat="server" disabled="disabled" OnClientClick="return false;"> Test Button</asp:LinkButton> 
関連する問題