2010-10-29 47 views
8

Tôi hiểu cách sử dụng javascript để thay đổi con trỏ thành bận trong khi trang đang thực hiện và gọi ajax.thay đổi con trỏ thành bận khi trang đang tải

Tuy nhiên tôi có một trang không sử dụng ajax, nó sử dụng một postback để tải lại trang. Tuy nhiên tải là khá dữ liệu chuyên sâu và phải mất một vài giây. Trong thời gian này, người dùng vẫn có thể nhấp vào trang. Tôi muốn chuyển con trỏ thành "chờ" để người dùng không cố bấm vào trang.

Ví dụ: tôi có một vài menu thả xuống gây ra đăng lại. Tôi thực hiện lựa chọn và tải trang trong 3 giây. Trong khi tải, tôi muốn con trỏ chuyển sang chờ đợi để người dùng không cố gắng thực hiện lựa chọn trên menu thả xuống thứ hai cho đến khi trang tải lại.

Điều này có khả thi không?

bổ sung Thông tin: (phiên bản đơn giản của thiết lập của tôi)

Tôi có một masterpage:

<form id="form1" runat="server"> 
<table width = "100%" bgcolor="White"> 
<tr><td> 
<h3><asp:ContentPlaceHolder id="MAIN" runat="server"></asp:ContentPlaceHolder></h3> 
</tr></td> 
</table> 
</form> 
<script type="text/javascript"> 
    function cursorwait(e) { 
     document.body.style.cursor = 'wait'; 
    } 

    var fm = document.getElementById('<% =form1.ClientID %>'); 
    if (fm.addEventListener) { 
     fm.addEventListener('submit', cursorwait, false); 
    } 
    else { 
     fm.attachEvent('onsubmit', cursorwait); 
    } 
</script> 

và sau đó một trang sử dụng trang chủ:

<asp:Content ID="Content1" ContentPlaceHolderID="MAIN" Runat="Server"> 
<table runat=server id="tb_simple_search_table" cellpadding = 0 cellspacing = 0> 
<tr><td> 
    <asp:DropDownList... 
    <asp:DropDownList... 
</td></tr> 
</table> 
</asp:content> 
+0

Đó là những dropdownlists rằng đang làm đăng lại trong thời gian đó tôi muốn con trỏ chờ đợi. – kralco626

+0

Tôi có nghĩa là thực sự, bất cứ lúc nào trang đang tải nó sẽ được tốt đẹp nếu tôi có thể có được con trỏ chờ đợi, bất kể lý do tại sao nó đang chờ đợi ... – kralco626

Trả lời

5

bạn có thể thêm trình xử lý vào sự kiện submit của biểu mẫu.

CSS

.wait, .wait * { cursor: wait; } 

Javascript

function cursorwait(e) { 
    document.body.className = 'wait'; 
} 

var fm = document.getElementById('<% =form1.ClientID %>'); 
var proxySubmit = fm.onsubmit; 

fm.onsubmit = function() { 
    cursorwait(); 
    if (proxySubmit) { 
     proxySubmit.call(fm); 
    } 
} 

ở đây chúng tôi đang đảm bảo phương pháp của chúng tôi được gọi nếu submit() được gọi trong js như thả xuống làm khi nó gây ra một postback. điều này cũng sẽ bắt bất kỳ trường hợp nào khác của biểu mẫu gửi.

+0

Tôi thích ý tưởng này. Tôi đặt kịch bản vào trang chủ của mình. Tuy nhiên tôi đã gặp lỗi khi dòng: fm.addEventListener nói rằng đối tượng được mong đợi. Tôi có một mẫu được gọi là form1 trong trang chủ của tôi nhưng không có trong các trang con của tôi. Làm cách nào tôi giải quyết vấn đề này? – kralco626

+0

Tôi đã thử sử dụng var fm = $ ('# form1'); nhưng tôi gặp lỗi trên dòng fm.attachEvent ('onsubmit', cursorwait); nói rằng opbject này không hỗ trợ điều này. – kralco626

+0

bạn có đang đặt tập lệnh sau biểu mẫu trên trang không? sử dụng tên của bất kỳ biểu mẫu nào chứa các điều khiển mà bạn quan tâm. '$ ('# form1')' nhận một đối tượng jquery, không phải là một phần tử dom. – lincolnk

5

Tôi không nhất định nếu đây là phương pháp tốt nhất hoặc hiệu quả nhất nhưng nếu bạn muốn thay đổi con trỏ để hiển thị trang đang bận sau khi nhấn nút jQuery sau đây nên thực hiện thủ thuật:

$(document).ready(function() { 
    $(".button").click(function() { 
     $("*").css("cursor", "wait"); 
    }); 
}); 
+0

giải pháp tuyệt vời, tiếc là chỉ không đến vấn đề tôi có. Tôi không chỉ có một nút có thể gây ra postback, tôi có một số đối tượng và nhiều sự kiện. Tôi sẽ defiantly giữ điều này trong tâm trí cho khi tôi đang sử dụng JQuery mặc dù. – kralco626

1

Chỉ cần cung cấp cho mỗi nút một lớp học, nói "WaitOnClick", sau đó chỉ cần viết nó: $(".WaitOnClick").click(function() {

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