2011-06-08 112 views
1

我已經看了這之前發現的JavaScript與谷歌Chrome,火狐和IE對我的作品時,我測試,但它似乎隨機(或特定瀏覽器),這是行不通的。我需要一個可以工作的解決方案。ASP.NET防止雙擊

這是我目前使用的jQuery:

$(document).ready(function() { 
    $("a.Once").one("click", function() { 
     $(this).click(function() { return false; }); 
    }); 
}); 

我「一次」添加類按鈕,我想,以確保不會點擊超過一次。再說一次,它總是適合我,但對於一些用戶來說,它什麼都不做。有沒有更好的替代解決方案,始終有效?

更新:這些是ASP.NET的LinkBut​​tons。

更新6/18: 我從誰一直有這個問題,兩個用戶得到更多的信息。

一說,他打一次按鈕,並在屏幕上閃爍,所以他離開頁面,回來吧,再點擊該按鈕,導致其自動發佈兩次。

其他聲稱他點擊一個不同的按鈕,導致此按鈕自動回發兩次。我查看了代碼,該按鈕沒有任何問題。

我能想到的唯一的事情是一個緩存的問題或可能擊中按鈕的網頁加載完成之前。我一直無法重現該問題,其中一個使用的是我使用的完全相同的瀏覽器。

+0

當你說「雙擊」,你的意思單擊元素超過一次,永遠 - 或UI姿態「雙擊」? – 2011-06-08 20:33:19

+0

多次單擊該按鈕。有些人是雙重的問題。這是一個ASP.NET LinkBut​​ton。我可能應該提到這一點。 – GregInWI2 2011-06-09 16:47:20

回答

1

如果這是一個表單提交,那麼你就可以關閉所有的提交按鈕上提交:

 

$('#someForm').submit(function(){ 
    $('input[type=submit]', this).attr('disabled', 'disabled'); 
}); 
 

或者他們獲准點擊超過一次,但經過一段時間後,才?

有場景,其中一個()失敗 - 見 http://api.jquery.com/one/ 任何如果您的用戶或jQuery的瀏覽器compat的問題不加載想法的意見嗎?

編輯: 剛剛發現這是一個LinkBut​​ton。在這種情況下嘗試

 

$('#yourClientIdForYourLinkButton').click(function(e) { 
    e.preventDefault(); 
}); 
 

或直接使用的clientid像

 

$('#<%=linkButton.ClientId%>').click(function(e) { 
    e.preventDefault(); 
}); 
 
+0

這是一個LinkBut​​ton,它是一個超鏈接。我應該提到這一點。這並不能阻止它。 – GregInWI2 2011-06-10 12:12:16

+0

在這種情況下,您將需要附加onclick事件 - 請參閱我的編輯 – 2011-06-10 14:04:59

1

您可以隱藏現有的鏈接,之後把一些文字,提醒,該頁面加載用戶。

<asp:LinkButton CssClass="Once" runat="server">Button</asp:LinkButton> 

<script type="text/javascript"> 

    $(document).ready(function() 
    { 
     $("a.Once").one("click", function (event) 
     { 
      $(this).hide().after("Please wait while we load your page..."); 
     }); 
    }); 

</script> 

另外,考慮添加代碼服務器端。你永遠不能指望JavaScript被啓用。

編輯:回答2.0

+0

它實際上是一個ASP.NET LinkBut​​ton,因此它有一個href =。昨天我將href值改爲#但我不喜歡這樣的結果。現在我想到了它,我應該將它改爲:javascript:void(0); – GregInWI2 2011-06-09 16:53:05

+0

我認爲jQuery是問題所在。而不是禁用我將​​href更改爲javascript:void(0);並且注意到有一次我按下了按鈕,它沒有做任何事情,就像它已經失效了,儘管它本來不應該。表單從未提交。你有.NET的服務器端代碼來防止它? – GregInWI2 2011-06-10 12:18:24

+0

如果您使用的是LinkBut​​ton,那麼您使用的是WebForms。當用戶單擊按鈕時,可以將值存儲在ViewState中。 ViewState [「buttonId_clicked」] = true。然後你可以在LinkBut​​ton的click事件中檢查它。如果該ViewState值爲true,則不要執行該邏輯。這並不理想,但是一種處理它的方法。 考慮到你的問題,jQuery附加了一個額外的事件,它不會替代現有的事件。我會更新代碼來反映。 – Fammy 2011-06-10 16:27:04

0

這真的取決於你的願望在這裏。一種選擇是在點擊後禁用錨標籤。這應該適用於所有瀏覽器。

,我已經看到使用的另一種選擇是隱藏在問題的項目,阿拉http://www.ilovecolors.com.ar/avoid-double-click-jquery/,但可能是矯枉過正您嘗試什麼。

+0

昨天我將href更改爲#並且不喜歡因此發生的事情。我應該只是一起刪除href標籤?點擊時沒有任何事情發生,第二次是首選。 – GregInWI2 2011-06-09 16:51:44

2

我已經嘗試了許多選項與jQuery但是這是我寫在C#一個簡單的代碼後,如何解決:在

現在,您添加到您的代碼背後:

的.aspx頁面Page_Load中:

 protected void Page_Load(object sender, EventArgs e) 
     { 

     ClientScriptManager cs = Page.ClientScript; 

     ButtonID.Attributes.Add("onClick", "this.disabled=true;" + cs.GetPostBackEventReference(ButtonID, "").ToString()); 

     } 

和最後一件事:

 protected void ButtonID_Click(object sender, EventArgs e) 
     { 
      System.Threading.Thread.Sleep(5000); 
      //rest of your code 

     } 

希望這有助於!

更新上一篇:

使用JavaScript,你可以停在點擊按鈕的客戶端事件表單提交,當它發生了第二次

<script type="text/javascript"> 

     var isSubmitted = false; 

     function preventMultipleSubmissions() { 

     if (!isSubmitted) { 

     $('#<%=btnSubmit.ClientID %>').val('Submitting.. Plz Wait..'); 

     isSubmitted = true; 

     return true; 

     } 

     else { 

     return false; 

     } 

    } 

    </script> 
    <asp:LinkButton ID="btnSubmit" runat="server" Text="Submit" OnClientClick="return preventMultipleSubmissions();" OnClick="btnSubmit_Click" /> 

或者你也可以在後臺做在回發:

btnSubmit.Attributes.Add("onclick", " this.disabled = true; " + ClientScript.GetPostBackEventReference(btnSubmit, null) + ";");