2008-09-08 36 views
7

Tôi có một vài điều khiển kế thừa từ các nút ASP.NET và sử dụng 'onserverclick'.Ngăn ngừa tình cờ nhấp đúp vào một nút

Nếu người dùng nhấp hai lần, nút sẽ kích hoạt hai sự kiện phía máy chủ. Làm thế nào tôi có thể ngăn chặn điều này?

Tôi đã thử đặt "this.disabled = 'true'" sau khi nhấp chuột (trong thuộc tính 'onclick') qua javascript, nhưng cũng chặn cả postback đầu tiên.

Trả lời

13

Xem ví dụ này để tắt kiểm soát khi đăng lại. Nó sẽ giúp bạn làm những gì bạn đang cố gắng đạt được.

http://encosia.com/2007/04/17/disable-a-button-control-during-postback/

+0

Cảm ơn ...Tôi đã thiếu tham khảo postback thủ công cần thiết bởi kỹ thuật đó – juan

+0

Thật không may, việc thay đổi UseSubmitBehavior thành false có nghĩa là biểu mẫu của bạn sẽ không còn hỗ trợ người dùng mà không có JavaScript. – NightOwl888

+0

Dường như trang web bị hỏng, Chrome báo cáo rằng trang web chứa phần mềm độc hại – SimplyInk

1

Một người khác đã nói điều này ở đâu đó ở đây cách đây vài ngày và tôi đồng ý - hãy sử dụng javascript để chỉ cần ẩn nút thay vì tắt nó; bạn có thể hiển thị hình ảnh "xoay tròn" ở vị trí của nó, cho phép người dùng biết điều gì đang diễn ra.

+1

Tôi không tin rằng tôi thích ý tưởng của các nút biến mất. Trừ khi nút khác (nút tắt) đã diễn ra. Nó có thể gây nhầm lẫn cho người dùng cuối ... không? –

+0

Tôi đồng ý với Rob, tôi không thích các nút bất mãn – juan

+0

+1 cho ý tưởng về một spinner - hiển thị cho người dùng rằng có điều gì đó đang diễn ra. Tôi vẫn còn để anh ta khả năng/"kiểm soát" để gửi lại, nếu anh ta tuyệt đối kiên quyết. – giraff

1

Thay vì ẩn, những gì tôi đã làm là hoán đổi nút bằng javascript. Hiển thị một hình ảnh màu xám khác trên nhấp vào nút đầu tiên.

2

Bạn không nhất thiết muốn hiển thị nút bị tắt khi đăng lại. Bạn muốn chắc chắn rằng họ không vô tình gửi hai lần. Vì vậy, việc vô hiệu hóa hoặc ẩn nút là kết quả của hành động phía máy chủ đã quá muộn trong trò chơi. Đến thời điểm này, yêu cầu thứ 2 đã được thực hiện theo cách của nó. Bạn cần phải làm điều đó với javascript hoặc đảm bảo mã phía máy chủ của bạn sẽ không chạy hai lần.

2

Trong trường hợp của một updatepanel và một nút bên trong một FormView-Template tôi sử dụng phương pháp sau đây:

<script type="text/javascript"> 
    // Using that prm reference, hook _initializeRequest 
    Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(InitializeRequestBuchung); 

    // Abfangen von Mehrfachklicks auf Buttons für asynchrone Postbacks im Updatepanel 
    function InitializeRequestBuchung(sender, args) { 
     var arrButtonIds = ["ButtonInsert", "ButtonUpdate"]; 

     // Get a reference to the PageRequestManager. 
     var prm = Sys.WebForms.PageRequestManager.getInstance(); 
     if (prm.get_isInAsyncPostBack() & jQuery.inArray(args.get_postBackElement().id, arrButtonIds) > -1) { 
      args.set_cancel(true); 
     } 
    } 
</script> 

này hủy bỏ một postback sau nếu hiện một postback async vẫn hoạt động. Hoạt động hoàn hảo.

1

Đặt thuộc tính Nút Sử dụngSubmitBehavior thành false. Sau đó, tạo ra một chức năng OnClientClick vô hiệu hóa nút. Nó sẽ giống như thế này:

<script type="text/javascript"> 
    function disableFunctn(button){ 
     button.disabled = true; 
    } 
</script> 
<asp:Button ID="button1" UseSubmitBehavior="false" OnClientClick="disableFunctn(this);"/> 

nhanh nhất là cách rẻ nhất:

<asp:Button ID="button1" UseSubmitBehavior="false" OnClientClick="this.disabled=true;"/> 
0

Bạn cũng có thể thử ví dụ btnSave.Enable = false; khi nút được nhấn và trước khi xử lý cho nút được thực hiện trong thói quen Sự kiện nhấp chuột. Nếu bạn cần nó được thiết lập lại để cho phép nó được kích hoạt có một nút riêng biệt đặt lại nút để tái sử dụng.

Một phương pháp khác là đặt nút có xác minh để người dùng được hỏi xem họ có muốn Lưu không, nó sẽ xuất hiện cả hai lần.

Tuy nhiên, một phương pháp khác sẽ là gắn cờ lần xuất hiện đầu tiên rồi đặt cửa sổ bật lên cho lần thứ hai để xác minh lần sử dụng thứ hai hoặc tiếp theo.

Các vấn đề liên quan