2010-05-27 42 views
5

Tôi đang sử dụng Javascript để tạo phần tử DIV và mở một trang mới bằng cách sử dụng onclientclick. Điều này làm việc tuyệt vời. Bây giờ, tôi cần phải viết cho nó từ phía máy chủ và phần tử này phải được tạo trước khi nó được đăng lại.Làm thế nào để chạy một hàm javascript trước khi postback của nút asp.net?

Làm cách nào để javascript thực thi trước khi đăng lại?

Hiện tại, tôi phải nhấn nút hai lần vì phần tử không tồn tại để ghi đè lên lần nhấp đầu tiên.

Để rõ ràng, tôi cần điều này để thực thi trước nút "Bật" của nút.

Cập nhật: Có vẻ như chức năng Javascript được gọi trước khi postback nhưng phần tử không được cập nhật cho đến khi tôi chạy postback thứ hai. Hmm

Cập nhật: Rất tiếc, điều này phức tạp hơn một chút.

Tôi đang tạo thẻ div trong javascript để mở cửa sổ mới. Bên trong thẻ div, tôi đang sử dụng cú pháp databinding <% = Xem trước%> để tôi có thể truy cập vào phần tử này ở phía máy chủ. Từ phía máy chủ, tôi đang tiêm mã.

Tôi nghĩ đây có thể là vấn đề về trứng gà nhưng không chắc chắn.

CẬP NHẬT!

Đây không phải là Javascript không chạy trước. Đó là cơ chế databinding đang đọc biến trống trước khi tôi có thể thiết lập nó.

Hmm

+0

Bạn đang tạo động một yếu tố trên trang bạn gửi và sau đó cần đọc dữ liệu bạn đã gửi serverside? – R0MANARMY

+0

Nó có thể giúp đỡ nếu bạn đăng một ví dụ thực sự đơn giản về những gì bạn đang cố gắng làm. Từ đọc câu hỏi của bạn, nó nghe có vẻ như tôi có thể sử dụng bảng cập nhật để tạo nội dung động của div của bạn. –

Trả lời

0

nhập mã vào đâyBạn có thể làm việc này cho bạn không?

Javascript

function stuffYouWantToDo(){ 
    //do your stuff 
    //then submit the .NET form 
    document.forms[0].submit(); 
} 

.NET đang

<asp:button ID="Button1" onClientClick="return false;stuffYouWantToDo();"/> 

này phải đảm bảo rằng những thứ bạn muốn làm là làm, sau đó biểu mẫu sẽ được gửi. Trả về false ngăn cản biểu mẫu được gửi khi bạn lần đầu tiên nhấp vào nút và dựa vào cuộc gọi trong hàmYouWantToDo để gửi biểu mẫu.

+0

Trả về false có thực sự hoạt động như thế không? Tôi sẽ nghĩ rằng không có gì sẽ được thực hiện sau khi trở về sai. Tôi nghĩ event.stopPropagation() sẽ là một cách tiếp cận tốt hơn. –

+0

err, có thể có những điều ngược lại. stuffYouWantToDo(); return false; – Tommy

1

bạn không phải dựa vào các điều khiển máy chủ để thực hiện đăng lại trong asp.net. bạn có thể kiểm soát tốt hơn ứng dụng của mình bằng cách đăng từ javascript bất cứ khi nào bạn sẵn sàng ..

tự động tạo khung có chức năng gọi là __doPostback (.....) và cuối cùng gọi nó mỗi lần cần đăng lại.

như vậy. thay vì sử dụng nút điều khiển máy chủ, bạn có thể có một số <button onclick="foo()" /> thông thường hơn khi bạn đã hoàn tất việc thực hiện tất cả những gì bạn cần, chỉ cần gọi hàm __doPostback.

asp.net cung cấp cho bạn một cách tiện lợi để truy cập chức năng đó với Trang.GetPostbackClientEvent (i tin, nhưng có những phương pháp cặp vợ chồng mà hỗ trợ phương pháp này) http://msdn.microsoft.com/en-us/library/system.web.ui.page.getpostbackclientevent.aspx

0

Nếu bạn muốn sử dụng jquery bạn có thể làm như sau:

$(document).ready(function() { 

    var execScript = $(".myButton").attr("href").replace("javascript:", ""); 

    $(".myButton").attr("href", "#").click(function() { 
     // Add before click logic here 

     eval(execScript); 
    }); 
}); 
-1

Không thể bạn chỉ cần thêm một validator tùy chỉnh ở đâu đó trong biểu mẫu của bạn?

+0

điều này không dành cho người xác thực. Tôi đang cố gắng tạo trang xem trước trong cửa sổ mới. –

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