2010-10-08 10 views
8

Tôi chỉ muốn thêm xác nhận của một số phía máy khách (xác thực Javascript) trong điều khiển người dùng web. Tôi đặt một trình xử lý OnClientClick và hàm được gọi. NHƯNG, ngay cả khi tôi trả về "sai", phương pháp OnClick luôn bị sa thải. Tôi đang làm gì sai?ASP.NET OnClientClick = "return false;" không hoạt động

Tôi có VS 2010, nhắm mục tiêu khung 4.0 với JQuery 1.4.2. và giao diện người dùng JQuery 1.8.4.

Dưới đây là một số mẫu mã:

<td style="text-align:right"><asp:Button ID="btnAddSave" OnClientClick="return ValidateMail();" OnClick="btnAddSave_Click" runat="server" Text="Submit" /></td> 

Script phương pháp:

function ValidateMail() { 
alert("Bouton clicked"); 
return false; 

}

Nếu tôi đặt một breakpoint trong sự kiện Page_Load, tôi thấy rằng tôi nhận được trong và btnAddSave_Click sự kiện cũng được thực hiện.

+0

Bạn đã cố gắng mà không có hộp cảnh báo? Tôi đã đọc một bài đăng như thế này gần đây –

+0

Tôi đã thử nghiệm điều này với ASP.NET 4 và nhận được hành vi mong đợi. –

+3

Kiểm tra lỗi javascript ngăn nó không trả về false – Aristos

Trả lời

3

Hãy thử thay đổi nó để

OnClientClick="ValidateMail(); return false;" 
+0

Cảm ơn câu trả lời, nó hoạt động - nhưng điều này không có ý nghĩa! 3 tháng trước khi tôi đã khắc phục vấn đề này rất giống với Firefox (trước khi phát hành cuối cùng của họ) và nó đã làm việc với "return ValidateMail();". –

+1

@ alonso.torres Tôi không hiểu điều này. Điều đó không chỉ trả về false "luôn luôn" tức là ngay cả khi biểu mẫu đi qua xác thực nó bây giờ sẽ trở lại là không hợp lệ bất kể do đó OnClick sẽ không bao giờ bị sa thải? – rism

8

đối với một số lý do, mặc dù tôi không có bất kỳ xử lý sự kiện jquery đính kèm, nó đã không làm việc.

Điều gì thực sự làm việc là:

OnClientClick="if (validate_form() == false) return(false);" 
+0

cảm ơn rất nhiều .. đã cứu ngày của tôi! Ngay cả tôi cũng có vấn đề như vậy! –

3

lớn câu trả lời. Tôi làm theo cách này. Cùng một kết quả- sự kiện OnClick không được kích hoạt nếu false được trả về từ hàm Java.

OnClientClick = "if (!ValidateDelete()) return false;" 
OnClick="btnDeleteSupplier_Click" 
0

Tôi đang viết câu trả lời này chỉ vì tôi đang sử dụng các nút html với ASP.NET WebForms và tôi không thể tìm thấy giải pháp tại sao tôi nên thay miếng của tôi mã với các ví dụ làm việc. Đây là giải pháp tại sao nó không hoạt động. Hy vọng nó sẽ giúp bạn hiểu vấn đề như kiểm tra nó đã giúp tôi. Đây là bài viết đầu tiên của tôi, vì vậy xin lỗi cho phong cách.

<button type="button" id="buttonAddOrEdit" class="btn btn-success" runat="server" onclick="return myValidate()" onserverclick="buttonAddOrEdit_ServerClick">Zapisz</button> 

Và chức năng javascript:

function myValidation() { 
     if (validator.form()) { 
      //Project logic 
      return true; 
     } 
     else return false; 
    }; 

Sử dụng phía khách hàng nhấp chuột sau khi đúng xác nhận đã không kích hoạt sự kiện trên phía máy chủ được binded đến nút. Giải pháp được đề cập để thay đổi đoạn mã thành:

onclick = "if (! MyValidation()) trả về;"

Hoạt động vì cách html được hiển thị trên trang có onserverclick được tạo. Onserverclick trên nút html đang được thay thế bằng phương thức __doPostBack từ javascript. Mã fullcode của nút html được hiển thị ở phía máy khách trông như sau:

<button onclick="return myValidation(); __doPostBack('ctl00$PortalContent$buttonAddOrEdit','')" id="ctl00_PortalContent_buttonAddOrEdit" type="button" class="btn btn-success">Zapisz</button> Błąd składni 

Và sau khi thay thế bằng nếu có quy định.

<button onclick="if(!myValidation()) return; __doPostBack('ctl00$PortalContent$buttonAddOrEdit','')" id="ctl00_PortalContent_buttonAddOrEdit" type="button" class="btn btn-success">Zapisz</button> 

Làm việc với return myValidate(); sẽ không thu hút sự kiện vì nó trả về trước __doPostBack.

Mã sau sẽ cho phép bạn thêm một số mã khác vào nút nếu cần thiết và sẽ không gây ra bất kỳ sự cố nào.

0

Chỉ cần thêm javascript:

Ví dụ:

javascript:return ValidateMail(); 
+1

Chào mừng bạn đến với Stack Overflow! Stack Overflow [yêu cầu tất cả các bài viết đều bằng tiếng Anh] (https://stackoverflow.blog/2009/07/non-english-question-policy/). Tôi đã xóa phần không phải tiếng Anh của bài đăng của bạn để tuân thủ quy tắc này. Bạn cũng có thể sử dụng một trong những cộng đồng ngăn xếp ngăn xếp ngôn ngữ cụ thể cho phép không phải tiếng Anh: [tiếng Tây Ban Nha] (http://es.stackoverflow.com), [tiếng Nhật] (http://ja.stackoverflow.com), [tiếng Nga ] (http://ru.stackoverflow.com), [tiếng Bồ Đào Nha] (http://pt.stackoverflow.com). – FelixSFD