我在内容页面上有一个JS函数,需要一些特定于该内容页面的控件ID。
内容页面
function invokeAjaxrequest() {
$find("<%= RadAjax1.ClientID%>").ajaxRequestWithTarget("<%= RadAjax1.UniqueID%>", "reload");
}
母版页
function closeAlert(oWnd) {
var arg = oWnd.argument;
if (arg) {
addAlert(arg);
invokeAjaxrequest();
}
}
如何定义invokeajaxrequest函数,或检查它是否存在于母版页中,这样如果内容页面没有定义,它不会导致异常?
答案 0 :(得分:2)
您可以使用
检查功能是否存在 if (typeof func === "function")
添加到您的代码中:
function closeAlert(oWnd) {
var arg = oWnd.argument;
if (arg) {
addAlert(arg);
if (typeof invokeAjaxrequest === "function") {
invokeAjaxrequest();
}
// misread - you _don't_ want an error if it doesn't exist
// so just do nothing here (don't have the else)
//else {
// alert("invokeAjaxrequest must be defined on each page");
//}
}
}
作为额外的,我会考虑使用某种形式的回调,而不是检查是否存在func。
答案 1 :(得分:2)
这是一个可能的解决方案
母版页 - 定义默认功能行为
<!-- this will be overridden in the content page -->
<asp:ContentPlaceHolder ID="PageScriptSection" >
function invokeAjaxrequest() {
}
</asp:ContentPlaceHolder>
这确保了函数alwayss存在。要覆盖它,可以在内容页面中定义它
内容页面 - 如有必要,覆盖特定页面的脚本
<asp:Content ID="CustomScript" ContentPlaceHolder="PageScriptSection">
function invokeAjaxrequest() {
$find("<%= RadAjax1.ClientID%>").ajaxRequestWithTarget("<%= RadAjax1.UniqueID%>", "reload");
}
</asp:Content>
答案 2 :(得分:0)
所有常规函数都是window对象中的metod。
假设您的内容页面已加载到父iframe中,
从父(主)的内容窗口中检查:
if (window.parent.invokeAjaxrequest== "function") { }
从父(主)中的内容窗口定义:
window.parent.invokeAjaxrequest = function() { .... };
如果您使用这样的政策,请注意跨域政策,否则您将获得&#34;保护&#34;错误,您无法从父级到内容副verca访问任何内容。