我的aspx页面: -
<script src="js/jquery-1.4.2.js" type="text/javascript"></script>
<script src="js/jquery-ui-1.8.2.custom.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function () {
//lots of other code here....
function showMessage(){
$("#msgDiv").dialog({
modal: true,
buttons: {
Ok: function() {
$(this).dialog('close');
}
},
resizable: true,
show: "explode",
position: "center",
closeOnEscape: true,
draggable: false
});
}
});
</script>
从上页触发的另一个aspx弹出页面
<script type="text/javascript">
window.opener.document.getElementById("msgDiv").innerHTML = <%=MessageToShow%>; //works very well for me.
window.opener.document.showMessage(); // I am unable to access it like this?
window.close();
</script>
基本上我想从弹出窗口调用showMessage()
。我还有其他逻辑可以在两个页面中执行。
答案 0 :(得分:13)
在准备好的文档中声明你的函数:
$(document).ready(function() {
window.showMessage = function() {
//...
};
});
然后你应该可以从其他文档中调用它:
window.opener.showMessage();
因为它在全局范围内,所以只需调用
即可在主文档中调用它showMessage();
答案 1 :(得分:3)
据我所知,你想做什么,不能做。那么,我们到底能做什么呢?
我认为最简单的想法是将showMessage
移到ready
函数之外,然后从内部调用它。
现在,如果它必须在该函数中定义,请将其命名为命名函数:
function calledonready()
{
/// stuff
function showMessage(){
/// stuff
}
}
$(document).ready(calledonready);
window.opener.document.calledonready.showMessage();
答案 2 :(得分:2)
您可以直接在showMessage()
标记下方声明<script>
个公开信息。好吧,事实证明这是不好的做法,但它会起作用。
更好的解决方案应该始终是使用您自己的命名空间。声明object
可以发生所有应用程序逻辑。
<script>
var MyApp = {
showMessage: function(){
// do something
}
};
稍后在您的代码中,您可以使用
从任何地方访问此对象MyApp.showMessage();
您可以使用closures
扩展该模式。因此,很多聪明人为ecmascript
开发了很好的模式。道格拉斯·克罗克福德(Douglas Crockford)就像“Javascript:好的部分”一样好读。
var MyApp = function(){
var my_private_data = "version 1.0.0",
foo = "bar";
return {
getfoo = function(){
return(foo);
},
showMessage = function(){
// do something
}
};
};
var app = MyApp();
app.showMessage();
这完全是关于private data
和namespacing
。这样,您身边的其他任何脚本都无法更改您在closured
对象中保留的任何日期。通过创建inheritance
和shared data
(半受保护),这个想法甚至可以更进一步,但我想这是另一个故事。