2012-03-08 33 views
9

Với mã này, tôi cố gắng Đóng cửa sổ (cách tôi đang thực hiện), nhưng tôi cũng có sự kiện Onclick bị bỏ qua!OnClick không hoạt động khi tôi sử dụng cả Onclick & OnClientClick

<script type="text/javascript"> 


      function GetRadWindow() { 
       var oWindow = null; 
       if (window.radWindow) oWindow = window.radWindow; 
       else if (window.frameElement.radWindow) oWindow = window.frameElement.radWindow; 
       return oWindow; 
      } 

      function CloseDialog() { 
       GetRadWindow().close(); 

      } 

trang ASPX:

<asp:Button ID="Button1" runat="server" Text="Soumettre ce ticket" 
       onclick="Button1_Click" OnClientClick="CloseDialog();return false;"/> 

Ứng dụng của tôi không bao giờ đi vào Button1_Click sự kiện, có thể bất cứ ai giúp tôi để tìm hiểu lý do tại sao? cảm ơn trước

EDIT: HTML tạo cho NÚT

<input type="submit" id="Button1" onclick="CloseDialog();" value="Soumettre ce ticket" name="Button1"/> 
+2

Hãy thử xóa bỏ trả về false; từ onClientClick của bạn. Điều này có lẽ sẽ làm giảm sự kiện cho onclick. – dash

+0

Bạn có thể cho chúng tôi biết những gì thực sự được phân phối cho khách hàng không? – greg84

+0

Bạn có thể cập nhật câu hỏi của mình bằng HTML thực tế được tạo cho 'Button1' không? – shanabus

Trả lời

13

This article loại giải thích sự cố. Bạn cần trả về true trong JS nếu bạn muốn sự kiện máy chủ kích hoạt. Nếu không, bạn phải trả về false.

Và, nó cũng giống như bạn sẽ phải thêm UseSubmitBehavior = false dựa trên: OnclientClick and OnClick is not working at the same time?

Điều này đặc biệt rõ ràng sau khi nhìn thấy rằng HTML được tạo của bạn chỉ có CloseDialog() và không phải là lời kêu gọi Button1_Click. Thay đổi này sẽ nối vào cuối onclick của bạn.

<asp:Button ID="Button1" runat="server" Text="Soumettre ce ticket" 
      onclick="Button1_Click" OnClientClick="CloseDialog();" 
      UseSubmitBehavior="false"/> 
+0

Tôi vừa loại bỏ trả về false; trong Onclient Click và thêm trả về true trong hàm CloseDialog() nhưng tiếc là không hoạt động – Slrg

+0

Cập nhật câu trả lời của tôi. Điều này dường như đã được trả lời. –

+0

Nó hoạt động! cảm ơn sự giúp đỡ của bạn! – Slrg

4

Bạn đang trở false trong onclientclick, vì vậy sự kiện này sẽ được trả về trước khi postback. Kết quả là, onclick không bao giờ cháy.

+0

+1 Đó là bob on! Trả về false sẽ ngăn chặn nút submit được gửi từ POSTing form ASP.NET. – greg84

+0

xin vui lòng giải thích downvote? Đây là câu trả lời chính xác. – Evert

+0

Đồng ý về câu trả lời của bạn - Tôi đã nhận xét về cùng một thời điểm bạn đã đăng câu trả lời của mình vì vậy +1 từ tôi nên phản đối downvote ngẫu nhiên :-) – dash

6

Tôi đã gặp sự cố này và sử dụng UseSubmitBehavior="false" gần như đã thực hiện thủ thuật. Hãy chắc chắn để thiết lập cuộc gọi OnClientClick của bạn chính xác:

Mã của tôi đang sử dụng OnClientClick="return ValidateSearch();" không chính xác. Nó chỉ nên

<asp:Button ID="keywordSearch" runat="server" Text="Search" TabIndex="1" 
OnClick="keywordSearch_Click" OnClientClick="if (!ValidateSearch()) { return false;};" /> 

Xem Source ở đây (và nói cho họ biết cảm ơn!)

Nếu nó được thiết lập không đúng, các OnClick chức năng sẽ không cháy.

0

Tôi vừa gặp vấn đề tương tự và tôi nghĩ chúng tôi đang bị nhầm lẫn giữa phía máy chủ enable="false" và phía máy khách "vô hiệu hóa".

Thuộc tính serverside để cho phép một điều khiển sử dụng control.Enabled = "false";không giống như áp dụng một Attribute, như control.Attribute.Add("disabled","disabled");

Nếu bạn áp dụng các Enabled = false; từ phía máy chủ, bạn đang thực sự tắt sự kiểm soát hoàn toàn, ngay cả khi nó được hiển thị trên màn hình! Tiếp tục, thử và nhấp chuột phải vào điều khiển và chọn Inspector hoặc FireFly để xem. Không có gì xuất hiện. Không có gì xảy ra, bởi vì điều khiển không "tồn tại".

Tuy nhiên, nếu bạn áp dụng thuộc tính Attribute, điều khiển hiển thị với máy chủ và ứng dụng khách và bạn có thể kiểm tra nó.

Điều tôi đã làm là thiết lập môi trường mặc định trên ASP.bên net bằng cách nói điều khiển (asp:Button trong trường hợp của tôi), có Enabled="true" (hoặc không nói bất cứ điều gì, vì đó là mặc định anyway).

Về phía server, khi PageLoad(), tôi làm cho nút của tôi Visible (trong trường hợp của tôi, tôi cũng đã có nó mặc định để visible="false"), và thêm Attribute giá trị thích hợp.

btnSEND.Visible = true; 
btnSEND.Attributes.Add("disabled", "disabled"); 

Bằng cách đó, nút không hoàn toàn "ẩn" với khách hàng và bằng cách sử dụng JavaScript ở một khu vực khác trong chương trình của tôi, tôi kiểm soát thời điểm bật hay không.

Phương pháp này cũng tránh phải sử dụng số UseSubmitBehavior="false".

0

trong page_load, bạn chuyển hàm java script bằng phương thức Add.Atribute với trả về true. đầu tiên nó sẽ tải chức năng javascript. sau đó nó sẽ tải sự kiện bấm nút

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