繁体   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