簡體   English   中英

從新窗口(用戶控件位於打開器中)調用用戶控件javascript函數

[英]Calling user control javascript functions from a new window (where the user controls are in the opener)

我有一個用戶控件,它將打開一個用於選擇某些項目的新窗口。 在該窗口上選擇一個項目后,該項目ID應該傳遞給用戶控件中的回調JavaScript函數。

為了在用戶控件中具有唯一的回調函數名稱(它可能在同一頁面上具有多個實例),我將用戶控件ID添加到函數名稱中,如下所示(在ascx文件中定義):

function OnItemSelection_<%=this.ID%>(selectedItemID)
{
    OnItemSelection("<%=SomeControl.ClientID%>", selectedItemID)
}

在外部js文件中定義了OnItemSelection的地方:

function OnItemSelection(controlID, selectedItemID)
{
    $(controlID).do_something(selectedItemID);
}

問題是,現在我不確定新頁面如何調用(從中打開用戶控件實例的)“正確”功能。

到目前為止,我唯一想到的想法是在查詢字符串中傳遞回調函數的名稱:

var CallbackFunction = function(selectedItemID)
{
    window.opener.<%=Request.QueryString["CallbackFunctionName"]%>(selectedItemID);
}

或者可能只是打開的用戶控件ID:

var CallbackFunction = function(selectedItemID)
{
    window.opener.OnItemSelection_<%=Request.QueryString["UserControlID"]%>(selectedItemID);
}

我的問題是:

1)傳遞像這樣的javascript函數名稱(或用戶控件ID)(我懷疑是)是一種不好的做法?

2)有什么更好的方法來處理這種情況?


編輯:

我現在考慮的另一種方法是在用戶控件中聲明一個全局變量(從后面的代碼中注冊它,因此它只會出現一次)。 然后,在打開新窗口時,可以為其分配相關功能(OnItemSelection _ <%= this.ID%>),然后從新窗口中調用它。

似乎比通過查詢字符串傳遞用戶控制數據更干凈。

據我所知,在這些情況下的最佳實踐是打開一個模態窗口,女巫將僅返回帶有設置窗口返回值的id。

您可以使用返回的Id參數(返回值)輕松進行決策。

在父窗口中:

var returnValue = window.showModalDialog("modalUrl.htm", "", sFeatures);
// use returned parameter

在模式窗口中:

window.returnValue = 12; //your Selected Item Id or etc

這很簡單,也是最常用的做法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM