2008-08-07 17 views
26

ASP.NET AJAX ModalPopupExtender có thuộc tính OnCancelScript và OnOkScript, nhưng dường như không có thuộc tính OnShowScript. Tôi muốn chỉ định một hàm javascript để chạy mỗi khi cửa sổ bật lên được hiển thị.Cách chỉ định javascript để chạy khi ModalPopupExtender được hiển thị

Trong các tình huống trước đây, tôi đặt TargetControlID thành điều khiển giả và cung cấp điều khiển của riêng tôi trước tiên thực hiện một số mã JS và sau đó sử dụng các phương thức JS để hiển thị cửa sổ bật lên. Nhưng trong trường hợp này, tôi hiển thị cửa sổ bật lên từ cả mã phía máy khách và máy chủ.

Có ai biết cách để làm điều này không?

BTW, tôi cần điều này vì tôi có một hộp văn bản theo phương thức mà tôi muốn tạo một trình soạn thảo TinyMCE. Nhưng tập lệnh init TinyCE không hoạt động trên hộp văn bản vô hình, vì vậy tôi phải tìm cách chạy nó tại thời điểm phương thức được hiển thị

+0

Họ chỉ bạn làm thế nào để RAISE một sự kiện bằng tay, không phải làm thế nào để đính kèm vào nó: http://www.asp.net/ajaxlibrary/act_modalpopup.ashx ... vô giá – rdmptn

Trả lời

26

hmmm ... Tôi là khá chắc chắn rằng có sự kiện được hiển thị cho MPE ... đây là phần đầu của tôi, nhưng tôi nghĩ bạn có thể thêm trình xử lý sự kiện vào sự kiện được hiển thị trên page_load

function pageLoad() 
{ 
    var popup = $find('ModalPopupClientID'); 
    popup.add_shown(SetFocus); 
} 

function SetFocus() 
{ 
    $get('TriggerClientId').focus(); 
} 

tôi không chắc chắn tho nếu điều này sẽ giúp bạn có gọi đó là từ phía máy chủ tho

+0

add_shown() vừa lưu lại cho tôi một loạt nỗ lực và làm việc hoàn hảo !! –

+6

Tuyệt vời! Tôi cũng phải thêm 'Sys.Application.add_load (pageLoad); 'vào trang của tôi để kích hoạt' pageLoad() ' – Jorin

+0

Chỉ cần thêm vào @Jorin: Tôi đã thêm javascript của mình qua thời gian chạy và add_shown sẽ hoạt động khi một phần postback được thực hiện (sử dụng bản cập nhật bảng điều khiển) tuy nhiên, nó sẽ không khi một postback đầy đủ được thực hiện (do điều khiển động kích hoạt MPE được hiển thị). Thêm Sys.Application.add_load (pageLoad); dòng ngay trước khi javascript của tôi làm cho nó hoạt động ngay cả trên trang đầy đủ postback. – yougotiger

0

Nếu bạn đang sử dụng nút hoặc liên kết hoặc thứ gì đó để kích hoạt cửa sổ bật lên hiển thị , bạn cũng có thể thêm một trình xử lý bổ sung vào sự kiện onClick của trình kích hoạt mà vẫn sẽ kích hoạt cửa sổ bật lên phương thức và chạy javascript cùng một lúc không?

+0

Bạn có thể hiển thị popup từ mã JS phía máy khách, vì vậy mà không có yêu cầu đăng lại. Tôi đoán bạn có thể chạy thêm mã JS theo cách đó. –

0

ModalPopupExtender sửa đổi nút/siêu liên kết mà bạn cho biết đó là phần tử "trình kích hoạt". Kịch bản onclick tôi thêm các trigger trước khi popup được hiển thị. Tôi muốn tập lệnh kích hoạt sau khi cửa sổ bật lên được hiển thị.

Ngoài ra, tôi vẫn để lại sự cố khi tôi hiển thị phương thức từ phía máy chủ.

0

việc TinyMCE trên hộp vô hình nếu bạn giấu nó với css (display: none;) bạn thực hiện sự kiện "onclick" trên TargetControlID, đối với init TinyMCE, nếu bạn sử dụng cũng updatepanel

8

Bạn nên sử dụng giá trị BehaviorID ("mpeBID") của ModalPopupExtender.

function pageLoad() { 
    $find('mpeBID').add_shown(HideMediaPlayer); 
} 

function HideMediaPlayer() { 
    var divMovie = $get('<%=divMovie.ClientID%>'); 
    divMovie.style.display = "none"; 
} 
+1

+1 để đề cập đến BehaviorID – Jorin

8

Đây là một cách đơn giản để làm điều đó trong lập trình:

<ajaxToolkit:ModalPopupExtender 
       ID="ModalPopupExtender2" runat="server" 
       TargetControlID="lnk_OpenGame" 
       PopupControlID="Panel1" 
       BehaviorID="SilverPracticeBehaviorID" > 
      <Animations> 
       <OnShown> 
        <ScriptAction Script="InitializeGame();" /> 
       </OnShown> 
      </Animations>     
</ajaxToolkit:ModalPopupExtender> 
+2

Tôi nhận được lỗi sau: "Hoạt ảnh trên TargetControlID =" hiddenButtonPopup1 "sử dụng thuộc tính AjaxControlToolkit.ModalPopupExtender.OnShown không tồn tại hoặc không thể được đặt". hiddenButtonPopup1 là một nút ẩn được gán cho TargetControlID. –

0
var launch = false; 

function launchModal() { 
    launch = true; 
} 

function pageLoad() { 
    if (launch) { 
      var ModalPedimento = $find('ModalPopupExtender_Pedimento'); 
      ModalPedimento.show(); 
      ModalPedimento.add_shown(SetFocus); 
    } 
} 

function SetFocus() { 
    $get('TriggerClientId').focus(); 
} 
+0

Làm thế nào điều này tốt hơn câu trả lời được chấp nhận trước đây? – jszobody

0

Đối với hai hình thức modal: phía

var launch = false; 
var NameObject = ''; 

function launchModal(ModalPopupExtender) { 
    launch = true; 
    NameObject = ModalPopupExtender; 
} 

function pageLoad() { 
    if (launch) { 
     var ModalObject = $find(NameObject); 
     ModalObject.show(); 
     ModalObject.add_shown(SetFocus); 
       } 
} 

function SetFocus() { 
    $get('TriggerClientId').focus(); 
} 

Server: behand

protected void btnNuevo_Click(object sender, EventArgs e) 
{ 
    //Para recuperar el formulario modal desde el lado del sercidor 
    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "key", "<script>launchModal('" + ModalPopupExtender_Factura.ID.ToString() + "');</script>", false); 
} 
Các vấn đề liên quan